//Created By ThienTD
var delay_hide = 500;

var ie= document.all;
var firefox= document.getElementById&&!document.all;
var ParentMenu = new Array(
    new Array('Trang chủ',  '/home.chn'),
    new Array('Star',       '/ngoi-sao.chn'),
    new Array('Music',      '/am-nhac.chn'),
    new Array('Cine\'',     '/phim-anh'),
    new Array('2-Tek!',     '/cong-nghe.chn'),
    new Array('Fashion',    '/thoi-trang.chn'),
    new Array('Đời sống',   '/doi-song.chn'),
    new Array('Made by teen','/kheo-tay.chn'),
    new Array('Tình yêu',   'home/tinh-yeu.chn'),
    new Array('Trắc nghiệm','http://quizzes.kenh14.channelvn.net/quizz-home.chn'),
    new Array('Chuyện lạ',  '/chuyen-la.chn'),
    new Array('Quà tặng',   '/qua-tang.chn'),
    new Array('Tâm sự',   '/tam-su.chn'),
    new Array('Việt Nam Idol',   '/vietnam-idol.chn'),
    new Array('MangaAnime',   '/manga-anime.chn')
);
// Menu Con Cua Chuyen muc Homeu
var ChildrenMenuHome = new Array();
// Menu Con Cua Chuyen muc star
var ChildrenMenuStar = new Array(
     new Array('Sao Việt',      '/ngoi-sao/v-star.chn')
);
// Menu Con Cua Chuyen muc Music
var ChildrenMenuMusic = new Array(
    new Array('Âu-Mỹ',      '/am-nhac/au-my.chn'),
    new Array('Châu Á',      '/am-nhac/chau-a.chn'),
    new Array('Việt Nam',      '/am-nhac/nhac-viet.chn'),
    new Array('Ca khúc mới','/am-nhac/ca-khuc-moi.chn')    
);
var ChildrenMenuVietNamIdol = new Array(
    new Array('US-UK',      '/am-nhac/au-my.chn'),
    new Array('Asia',      '/am-nhac/chau-a.chn'),
    new Array('VPop',      '/am-nhac/nhac-viet.chn'),
    new Array('Ca khúc mới',      '/am-nhac/ca-khuc-moi.chn'),
    new Array('Việt Nam Idol',      '/vietnam-idol.chn')
);
// Menu Con Cua Chuyen muc Cine
var ChildrenMenuCine = new Array(
//    new Array('Cinemania',      '/phim-anh/cine-land.chn'),
//    new Array('Phim Việt Nam',      '/phim-anh/phim-viet-nam.chn'),
//    new Array('Phim Âu-Mỹ',      '/phim-anh/phim-au-my.chn'),
//    new Array('Phim Châu Á',      '/phim-anh/phim-chau-a.chn'),
//    new Array('Movie Game',      '/phim-anh/kho-phim.chn'),
//    new Array('Cảm xúc phim',      '/phim-anh/cam-xuc-phim.chn')

//commented by katz
 //new Array('Mọt phim',      '/phim-anh/xem-va-comment.chn'),
    new Array('Phim Việt Nam',      '/phim-anh/phim-viet-nam.chn'),
    new Array('Phim Âu-Mỹ',      '/phim-anh/phim-au-my.chn'),
    new Array('Phim Châu Á',      '/phim-anh/phim-chau-a.chn')
    //commented by katz
    //new Array('Kho phim',      '/phim-anh/kho-phim.chn')
);
// Menu Con Cua Chuyen muc 2-tek
var ChildrenMenu2Tek = new Array(
    new Array('Công nghệ vui',               '/cong-nghe/2tek-vui.chn'),
    new Array('Thủ thuật',               '/cong-nghe/thu-thuat.chn'),
    //commented by katz
    //new Array('Diệt Virut',               '/cong-nghe/diet-virus.chn'),
    new Array('Sản phẩm mới',               '/cong-nghe/san-pham-moi.chn')
    //new Array('Thử thách anh hùng',               '/cong-nghe/thu-thach-anh-hung.chn?utm_source=kenh14_CartoonNetWork&utm_medium=Cartoon_Event&utm_content=Cartoon_event&utm_campaign=Cartoon_event_k14') 
    
);
// Menu Con Cua Chuyen muc Fashion
var ChildrenMenuFashion = new Array(
    new Array('Mốt 14',        '/thoi-trang/tieu-diem.chn'),
    new Array('Xu hướng',        '/thoi-trang/xu-huong.chn'),
    new Array('Teen Look',        '/thoi-trang/teenlook.chn')
//    new Array('Phụ kiện',        '/thoi-trang/phu-kien.chn'),
   // new Array('Teen Đẹp',        '/thoi-trang/nhan-vat-thoi-trang.chn')
);
// Menu Con Cua Chuyen muc Life
var ChildrenMenuLife = new Array(
  
    new Array('Nhân vật',   '/doi-song/nhan-vat-doi-song.chn'),
      new Array('Quán xá',   '/doi-song/quan-xa.chn'),
    new Array('Teen Story',   '/doi-song/teen-story.chn')
 
  //  new Array('Câu chuyện thật','/tam-su.chn')
   
);
var ChildrenMenuTeeniscover = new Array(
    new Array('Tips tiện ích',               '/teeniscover/tips-tien-ich.chn'),
    new Array('Khám phá mới',               '/teeniscover/kham-pha-moi.chn'),
    new Array('Hành động',               '/teeniscover/hanh-dong.chn')
);
var ChildrenMenuHocDuong = new Array(
    new Array('Du học',              '/hoc-duong/du-hoc.chn'),
    new Array('Bản tin 46\'',              '/hoc-duong/ban-tin-46.chn')
    //new Array('Cái tôi khác biệt',   '/gabba/home.aspx?utm_source=kenh14&utm_medium=GabbaEvent&utm_content=gabbaevent&utm_campaign=gabbaevent_k14')
);
// Menu Con Cua Chuyen muc Made By Teen
var ChildrenMenuMadebyTeen = new Array(
     new Array('Handmade','/made-by-teens/do-thu-cong.chn'),
     new Array('Kitchen','/made-by-teens/nau-an.chn'),
      
     new Array('Mẹo vặt','/made-by-teens/thu-vien-teens-lam.chn')
);
// Menu Con Cua Chuyen muc Tinh yeu gioi tinh
var ChildrenMenuLove = new Array(
    new Array('Kiến thức giới tính',   '/gioi-tinh/kien-thuc-gioi-tinh.chn'),
    new Array('Câu chuyện giới tính',   '/gioi-tinh/cau-chuyen-gioi-tinh.chn'),
    new Array('Đẹp +',   '/gioi-tinh/dep.chn')
);
// Menu Con Cua Chuyen muc Quizz
var ChildrenMenuQuizz = new Array(

    new Array('Horoscope',   'http://quizzes.kenh14.channelvn.net/horoscope.chn')
);
// Menu Con Cua Chuyen muc Chuyen la
var ChildrenMenuChuyenLa = new Array();
// Menu Con Cua Chuyen muc Kuoi 14
var ChildrenMenuKuoi14 = new Array(
    new Array('Clip vui',   '/vui-cuoi/clip-vui.chn'),
    new Array('Truyện cười',   '/vui-cuoi/truyen-cuoi.chn'),
     new Array('Ảnh vui',   '/vui-cuoi/anh-vui.chn'),
     new Array('Rạp Făn-nỳ',   '/vui-cuoi/xem-clip.chn')
    //,new Array('Chơi Game',      '/vui-cuoi/choi-game.chn')
    
   
    
 );
 var ChildrenMenuMangaAnime = new Array(
    new Array('Đời sống Otaku',      '/manga-anime/otaku.chn'),
    new Array('Cosplay',   '/manga-anime/cosplay.chn'),
    new Array('Từ điển Otaku',   '/manga-anime/tudien-otaku.chn')
 );


 
var ChildrenMenuTamSu = new Array();
// Menu Con Cua Chuyen muc Qua tang
var ChildrenMenuQuaTang = new Array();


//Created By QuyTD : Dung giong method String.Format cua .NET
String.prototype.StringFormat = function(args)
{	
    var text = this;
    for (var i = 0 ; i < arguments.length; i++)
    {
        text = text.replace("{"+ i +"}",arguments[i]);
    }
    return text;
}

function HideSearchFunny()
{
    document.getElementById('header_search').style.display="none";
    document.getElementById('subMenu').style.width="940px";
    document.getElementById('search_panel').style.width="60px";
}

function SelectSubMenu(id)
{
        clear_delayhide();
        var SubMenu;
        var postion = 5;
        var type=1;
        var colorCode='#fff';
        if(id=='home')
        {
            insertPetIcon();
            SubMenu = ChildrenMenuHome;
        }
        else if(id=='star')
        {
            SubMenu = ChildrenMenuStar;
            //postion=120;
        }
        else if(id=='music')
        {
            SubMenu = ChildrenMenuMusic;
            //postion=70;
            colorCode='#FFFD9C';
        }
        else if(id=='cine')
        {
            insertPetIcon();
            SubMenu = ChildrenMenuCine;
            //postion=80;
            colorCode='#E55366';
        }
        else if(id=='hitek')
        {
            SubMenu = ChildrenMenu2Tek;
            //postion=170;
            colorCode='#1D8AA7';
        }
        else if(id=='fashion')
        {
            SubMenu = ChildrenMenuFashion;
            //postion=300;
            type=4;
            colorCode='#FCD2FF';
            insertPetIcon();
        }
        else if(id=='life')
        {
            SubMenu = ChildrenMenuLife;
            //postion=350;
            colorCode='#BBE382';
            insertPetIcon();
        }
        else if(id=='madebyteen')
        {
            SubMenu = ChildrenMenuMadebyTeen;
            //postion=350;
            colorCode='#1BEBEB';
            insertPetIcon();
        }
        else if(id=='tamsu')
        {
            SubMenu = ChildrenMenuTamSu;
            insertPetIcon();
        }
        else if(id=='love')
        {
            SubMenu = ChildrenMenuLove;
            //postion=300;
            colorCode='#FCD2FF';
            insertPetIcon();
        }
        else if (id=='hocduong')
        {
            SubMenu = ChildrenMenuHocDuong;
            //postion=450;
            type=1;
            colorCode='#FEFF69';
            insertPetIcon();
            //alert("this is hoc duong");
        }
        else if (id=='duhoc')
        {
            SubMenu = null;
            //postion=540;
            type=1;
            colorCode='#FEFF69';
            insertPetIcon();
        }
        else if(id=='quizze')
        {
            SubMenu = ChildrenMenuQuizz;
            //postion=690;
            type=5;
            insertPetIcon();
        }
        else if(id=='chuyenla')
        {
            SubMenu = ChildrenMenuChuyenLa;
            insertPetIcon();
        }
        else if(id=='kuoi')
        {
            //HideSearchFunny();
            SubMenu = ChildrenMenuKuoi14;
            //postion=300;
            type=3;
            colorCode='#FEFF00';
            insertPetIcon();
        }
        else if(id=='quatang')
        {
            SubMenu = ChildrenMenuQuaTang;
            insertPetIcon();
        } 
        else if(id=='vietnam-idol')
        {
            SubMenu  =ChildrenMenuVietNamIdol;
        }
        else if (id=='manga')
        {
            SubMenu = ChildrenMenuMangaAnime;
            postion = 150;
            type=2;
        }
        else if (id=='vietnam')
        {
            SubMenu = ChildrenMenuMusic;
            postion = 150;
            type=1;
        }
         else if (id=='teeniscover')
        {
            SubMenu = ChildrenMenuTeeniscover;
            //postion = 250;
        }
        
      GenSubmenu(SubMenu,postion,type,colorCode);
         
}
function FocusMenu()
{
       
        if(document.getElementById('currentTab').value!="")
    	{
    	    clear_delayhide();
		    ChangeBackGroundImageOver(document.getElementById('currentTab').value);
		}

}
function BlurMenu()
{
     if(document.getElementById('currentTab').value!="")
     {
        OrginaltionBacGround(document.getElementById('currentTab').value);
        DeactiveMenu();
     }
    
}

var htmltemp;
function GenSubmenu(Submenu,position,type,colorCode)
{
  
    var htmlCode ="<a  href='{0}'>{1}</span>&nbsp;&nbsp;&nbsp;&nbsp;";
    var htmlCode1 = "<a  href='{0}' style='color:"+colorCode+";font-size:11px;font-weight:bold;font-family:tahoma;text-decoration:none;'>{1}</span>&nbsp;&nbsp;&nbsp;&nbsp;";
    var stringGen ="" ;
    if(Submenu!=null)
    {
        if(Submenu.length>0)
        {
            var subMenuCount = 0;
            var strSubmenu = "";
            
            strSubmenu = document.getElementById(document.getElementById('hiddPreFix').value+'_hiddenSubMenu').value;
            
            for(subMenuCount = 0; subMenuCount < Submenu.length; subMenuCount++)
            {
                var menuItem = Submenu[subMenuCount];
                
                
                if(menuItem[0]=="Horoscope")
                {
                    htmlCode ="<a  href='{0}' class='menufix' style='color:#fff'>{1}</span>&nbsp;&nbsp;&nbsp;";
                }
               
                if(menuItem[1].indexOf('/'+strSubmenu+'.chn')==-1)
                {
                    
                    stringGen+= htmlCode.StringFormat(menuItem[1],menuItem[0]);
                }
                else
                {
                    
                    stringGen+= htmlCode1.StringFormat(menuItem[1],menuItem[0]);
                }
            }
            
        }

      document.getElementById('subMenu').innerHTML = "<div style=\"padding-left:"+position+"px\">"+stringGen+"</div>";
       //document.getElementById('subMenu').style.width= "600px";      
       //document.getElementById('subMenu').innerHTML = "<div style=\"text-align:le;\">"+stringGen+"</div>";
       
       
    }
    else return;
}


function ClearSubmenu()
{
     document.getElementById('subMenu').innerHTML = document.getElementById('mainTab').value;
     document.getElementById('currentTab').value=""; 
   
}

function DeactiveMenu()
{
   
     var functiondelay = "ClearSubmenu()";
     delayhide = setTimeout(functiondelay,delay_hide);
}

function clear_delayhide()
{
	if (window.delayhide)
	{
		clearTimeout(delayhide);
	}
}

function BackgroundHover(ctr,id,ctrSearch)
{
    if(id=='home')
        {
          
           ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_Home.gif') repeat-x top center";          
           tda = ctr.getElementsByTagName("A")[0];
           tda.style.color = '#fff';
           MainStyle();
        
        }
        if(id=='star')
        {
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_Star.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
            MainStyle();
           
        }
        if(id=='cine')
        {
           ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_Cine.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
            MainStyle();
           
        }
        if(id=='music')
        {
      
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_Music.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
           MainStyle();
          
          
        }
        
        if(id=='fashion')
        {
           ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_Fashion.gif') repeat-x top center";
           tda = ctr.getElementsByTagName("A")[0];
           tda.style.color = '#fff';
          
          
         
        
        }
        if(id=='life')
        {
       
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_DoiSong.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
           tda.style.color = '#fff';
          MainStyle();
         
        }
        if(id=='quizze')
        {
            
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_Quizz.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
            
            
        }
        if(id=='love')
        {
           
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_GioiTinh.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
           tda.style.color = '#fff';
           MainStyle();
           
        }
         if(id=='hitek')
        {
           
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_2Tek.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
           MainStyle();
           
        }
        if(id=='madebyteen')
        {
         
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_MadeByTeen.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
         MainStyle();
           
        }
        if(id=='quatang')
        {
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_Quatang.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
            MainStyle();
           
        }
        if(id=='hocduong')
        {
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_HocDuong.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
            MainStyle();
           
        }
        if(id=='duhoc')
        {
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_Duhoc.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
            MainStyle();
           
        }
         if(id=='chuyenla')
        {
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_ChuyenLa.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
            MainStyle();
            
        }
         if(id=='kuoi')
        {
            ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_Funny.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
           tda.style.color = '#fff';
           
            
        }
        if(id=='tamsu')
        {
           ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_TamSu.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
            MainStyle();
            
        }
        if(id=='game')
        {
           ctr.style.background = "url('/ImagesGUI/portal/header/menuK14_GameK.gif') repeat-x top center";
            tda = ctr.getElementsByTagName("A")[0];
            tda.style.color = '#fff';
            MainStyle();
            
        }
        
        
        document.getElementById('currentTab').value = id;
}


function removeHTMLTags(ctrID){
 	
 		var strInputCode = document.getElementById(ctrID).value;
 		
 	 	strInputCode = strInputCode.replace(/&(lt|gt);/g, function (strMatch, p1){
 		 	return (p1 == "lt")? "<" : ">";
 		});
 		var strTagStrippedText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
 		while(strTagStrippedText.indexOf('"')!=-1)
 		    strTagStrippedText = strTagStrippedText.replace('"','');
 		while(strTagStrippedText.indexOf('\'')!=-1)    
 		strTagStrippedText = strTagStrippedText.replace('\'','');
 		document.getElementById(ctrID).value = strTagStrippedText;
 		return strTagStrippedText;
 		//alert("Output text:\n" + strTagStrippedText);
 		
}
var IsFocus = "";
    var delayhide = null;
    function getControlByName(id)
    {
        return document.getElementById(document.getElementById("prefex").value + id);
    }    
    var prefex = document.getElementById("prefex").value;
    
     
    String.prototype.trim = function() 
  {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');        
  };

    function VC_Requirefield(field,msg)
    {
       
        var control = document.getElementById(field)
        if (control) control.value = control.value.trim();
        //alert(control)
        if (control != null && control.value.length == 0)
        {
           
           // AlertAndSetFocus(control,msg);            
            return false;
        }
        else
        {
            if(control.value == 'Tìm kiếm trên Kênh14') return false;
            return true;
        }
        
    }
     function AlertAndSetFocus(ctr,msg)
    {        
        ctr.focus();
        alert(msg);
    }
    function HideText()
    {
     
     
        var textSearch = document.getElementById(prefex+"txtSearch");
        //alert(prefex);
        textSearch.value = "";
    }
     function ShowText()
    {
        
         var control = document.getElementById(prefex+"txtSearch");
        if (control) control.value = control.value.trim();
        if (control != null && control.value.length == 0)
        {
       
            var textSearch = document.getElementById(prefex+"txtSearch");
            textSearch.value = "Tìm kiếm trên Kênh14";
        }
    } 
    function Check()
    {
        var textSearch = document.getElementById(prefex+"txtSearch");
        if(textSearch.value!="" || textSearch.value!=" ")
        {
            window.location='/SearchResult.aspx?key='+textSearch.value;
        }
    } 
    
    
    function RandomLogoHome()
    {
        var arrLogo = new Array(
            '/ImagesGUI/Portal/Header/logo0.jpg',
            '/ImagesGUI/Portal/Header/logo1.jpg',
            '/ImagesGUI/Portal/Header/logo2.jpg',
            '/ImagesGUI/Portal/Header/logo7.jpg',
            '/ImagesGUI/Portal/Header/baseball_r2_c2.jpg',
            '/ImagesGUI/Portal/Header/basketball_r2_c2.jpg',
            '/ImagesGUI/Portal/Header/Candy_r2_c2.jpg',
            '/ImagesGUI/Portal/Header/tv_r2_c2.jpg'
        );
        var arrIndex = getIndexRandom(8);
        var im = document.getElementById('imgLogoK14');
        if(im!=null)
        {
            im.src = arrLogo[arrIndex[0]];
        }
    }
    
    
    function getIndexRandom(numOfItem)
    {
        var arr = new Array();
        for(var i=0;i<numOfItem;i++)
        {
            arr[i] = i;
        }
        Shuffle(arr);
        return arr;
    }
    function Shuffle( myArray ) {
      var i = myArray.length;
      if ( i == 0 ) return false;
      while ( --i ) {
         var j = Math.floor( Math.random() * ( i + 1 ) );
         var tempi = myArray[i];
         var tempj = myArray[j];
         myArray[i] = tempj;
         myArray[j] = tempi;
       }
    }
    
    
    
    
    function MainStyle1(ctr)
    {
       document.getElementById('menutopleft').className= "menutopleftMain";
       document.getElementById('menutopright').className= "menutoprightMain";
       document.getElementById('tdMenutop').className= "tdHomeBgTopMain";
       document.getElementById('tdSubMenu').className= "tdSubmenuMain";
       document.getElementById('headerBottom').className= "headerBottomMain";
       ctr.className= "txtSearchMain";
    }
    
    function BackGroundOut(ctr,ctrSearch)
    {
        ctr.style.backgroundImage = "";
        ctr.style.backgroundRepeate = "repeate";
        tda = ctr.getElementsByTagName("A")[0];
        tda.style.color = '#000';
    }
    function BackGroundOut2(ctr,ctrSearch, curPage)
    {
        
        ctr.style.backgroundImage = "";
        ctr.style.backgroundRepeate = "repeate";
        tda = ctr.getElementsByTagName("A")[0];
        
        if (curPage.value.indexOf('am-nhac')!=-1)
            tda.style.color = '#0A293B'
        else if (curPage.value.indexOf('phim-anh')!=-1)
            tda.style.color = '#C2C2C2'
        else if (curPage.value.indexOf('thoi-trang')!=-1)
            tda.style.color = '#520815'
        else if (curPage.value.indexOf('doi-song')!=-1)
            tda.style.color = '#112710'
        else if (curPage.value.indexOf('kheo-tay')!=-1)
            tda.style.color = '#05282C'
        else if (curPage.value.indexOf('tam-su')!=-1)
            tda.style.color = '#770D4F'
        else if (curPage.value.indexOf('gioi-tinh')!=-1)
            tda.style.color = '#4A2052'
        else if(curPage.value.indexOf('chuyen-la')!=-1)
            tda.style.color = '#FAECEB';
        else if(curPage.value.indexOf('vui-cuoi')!=-1)
            tda.style.color = '#10260F';    
        else
            tda.style.color = '#000';
        
    }
    //window.setTimeout("showAllComboBox();", 1500);
  function curTime()
    {
	    var now=new Date()
	    var hrs=now.getHours()
	    var min=now.getMinutes()
	    var sec=now.getSeconds()
	    var day =now.getDate();
	    var month = now.getMonth()+1;
	    var year = now.getFullYear();
	    var don="AM"
	    if (hrs>=12){ don="PM" }
	    if (hrs>12) { hrs-=12 }
	    if (hrs==0) { hrs=12 }
	    if (hrs<10) { hrs="0"+hrs }
	    if (min<10) { min="0"+min }
	    if (sec<10) { sec="0"+sec }
	    document.getElementById('currentTime').innerHTML="Hôm nay, ngày "+day+" tháng "+month+" năm "+year+" "+hrs+":"+min+":"+sec+" "+don
	    setTimeout("curTime()",1000)
    }
    
    
    function Validate1()
    {        
        
        if (!VC_Requirefield(prefex+"txtSearch","Bạn chưa nhập từ khóa")) return false;    
        
        key = removeHTMLTags(prefex+"txtSearch");
        window.location='/SearchResult.aspx?key='+key;
        return false;
    } 
    function doClick(buttonName,event)
    {
        var key;
         if(window.event)
              key = window.event.keyCode;     //IE
         else
              key = e.which;     //firefox
        if (key == 13)
        {
            //Get the button the user wants to have clicked
            var btn = document.getElementById(buttonName);
            if (btn != null)
            { //If we find the button click it
                btn.click();
                event.keyCode = 0
            }
        }
    }




function findPosX(obj)
{
	var curleft = 0;
	if(obj.offsetParent)
		while(1) 
		{
			curleft += obj.offsetLeft;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
	else if(obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if(obj.offsetParent)
	while(1)
	{
		curtop += obj.offsetTop;
		if(!obj.offsetParent)
		break;
		obj = obj.offsetParent;
	}
	else if(obj.y)
		curtop += obj.y;
	return curtop;
}

function gotoURL(link)
{
    window.location = link;
}







/*  Prototype JavaScript framework, version 1.5.1.1
 *  (c) 2005-2007 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *
/*--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.5.1.1',

  Browser: {
    IE:     !!(window.attachEvent && !window.opera),
    Opera:  !!window.opera,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
  },

  BrowserFeatures: {
    XPath: !!document.evaluate,
    ElementExtensions: !!window.HTMLElement,
    SpecificElementExtensions:
      (document.createElement('div').__proto__ !==
       document.createElement('form').__proto__)
  },

  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,

  emptyFunction: function() { },
  K: function(x) { return x }
}

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var Abstract = new Object();

Object.extend = function(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
}

Object.extend(Object, {
  inspect: function(object) {
    try {
      if (object === undefined) return 'undefined';
      if (object === null) return 'null';
      return object.inspect ? object.inspect() : object.toString();
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  },

  toJSON: function(object) {
    var type = typeof object;
    switch(type) {
      case 'undefined':
      case 'function':
      case 'unknown': return;
      case 'boolean': return object.toString();
    }
    if (object === null) return 'null';
    if (object.toJSON) return object.toJSON();
    if (object.ownerDocument === document) return;
    var results = [];
    for (var property in object) {
      var value = Object.toJSON(object[property]);
      if (value !== undefined)
        results.push(property.toJSON() + ': ' + value);
    }
    return '{' + results.join(', ') + '}';
  },

  keys: function(object) {
    var keys = [];
    for (var property in object)
      keys.push(property);
    return keys;
  },

  values: function(object) {
    var values = [];
    for (var property in object)
      values.push(object[property]);
    return values;
  },

  clone: function(object) {
    return Object.extend({}, object);
  }
});

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this, args = $A(arguments), object = args.shift();
  return function(event) {
    return __method.apply(object, [event || window.event].concat(args));
  }
}

Object.extend(Number.prototype, {
  toColorPart: function() {
    return this.toPaddedString(2, 16);
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  },

  toPaddedString: function(length, radix) {
    var string = this.toString(radix || 10);
    return '0'.times(length - string.length) + string;
  },

  toJSON: function() {
    return isFinite(this) ? this.toString() : 'null';
  }
});

Date.prototype.toJSON = function() {
  return '"' + this.getFullYear() + '-' +
    (this.getMonth() + 1).toPaddedString(2) + '-' +
    this.getDate().toPaddedString(2) + 'T' +
    this.getHours().toPaddedString(2) + ':' +
    this.getMinutes().toPaddedString(2) + ':' +
    this.getSeconds().toPaddedString(2) + '"';
};

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0, length = arguments.length; i < length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }

    return returnValue;
  }
}

/*--------------------------------------------------------------------------*/

var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  stop: function() {
    if (!this.timer) return;
    clearInterval(this.timer);
    this.timer = null;
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.callback(this);
      } finally {
        this.currentlyExecuting = false;
      }
    }
  }
}
Object.extend(String, {
  interpret: function(value) {
    return value == null ? '' : String(value);
  },
  specialChar: {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '\\': '\\\\'
  }
});

Object.extend(String.prototype, {
  gsub: function(pattern, replacement) {
    var result = '', source = this, match;
    replacement = arguments.callee.prepareReplacement(replacement);

    while (source.length > 0) {
      if (match = source.match(pattern)) {
        result += source.slice(0, match.index);
        result += String.interpret(replacement(match));
        source  = source.slice(match.index + match[0].length);
      } else {
        result += source, source = '';
      }
    }
    return result;
  },

  sub: function(pattern, replacement, count) {
    replacement = this.gsub.prepareReplacement(replacement);
    count = count === undefined ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  },

  scan: function(pattern, iterator) {
    this.gsub(pattern, iterator);
    return this;
  },

  truncate: function(length, truncation) {
    length = length || 30;
    truncation = truncation === undefined ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : this;
  },

  strip: function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  },

  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(function(script) { return eval(script) });
  },

  escapeHTML: function() {
    var self = arguments.callee;
    self.text.data = this;
    return self.div.innerHTML;
  },

  unescapeHTML: function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? (div.childNodes.length > 1 ?
      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
      div.childNodes[0].nodeValue) : '';
  },

  toQueryParams: function(separator) {
    var match = this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return {};

    return match[1].split(separator || '&').inject({}, function(hash, pair) {
      if ((pair = pair.split('='))[0]) {
        var key = decodeURIComponent(pair.shift());
        var value = pair.length > 1 ? pair.join('=') : pair[0];
        if (value != undefined) value = decodeURIComponent(value);

        if (key in hash) {
          if (hash[key].constructor != Array) hash[key] = [hash[key]];
          hash[key].push(value);
        }
        else hash[key] = value;
      }
      return hash;
    });
  },

  toArray: function() {
    return this.split('');
  },

  succ: function() {
    return this.slice(0, this.length - 1) +
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
  },

  times: function(count) {
    var result = '';
    for (var i = 0; i < count; i++) result += this;
    return result;
  },

  camelize: function() {
    var parts = this.split('-'), len = parts.length;
    if (len == 1) return parts[0];

    var camelized = this.charAt(0) == '-'
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
      : parts[0];

    for (var i = 1; i < len; i++)
      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);

    return camelized;
  },

  capitalize: function() {
    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
  },

  underscore: function() {
    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
  },

  dasherize: function() {
    return this.gsub(/_/,'-');
  },

  inspect: function(useDoubleQuotes) {
    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
      var character = String.specialChar[match[0]];
      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
    });
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
  },

  toJSON: function() {
    return this.inspect(true);
  },

  unfilterJSON: function(filter) {
    return this.sub(filter || Prototype.JSONFilter, '#{1}');
  },

  isJSON: function() {
    var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
  },

  evalJSON: function(sanitize) {
    var json = this.unfilterJSON();
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
  },

  include: function(pattern) {
    return this.indexOf(pattern) > -1;
  },

  startsWith: function(pattern) {
    return this.indexOf(pattern) === 0;
  },

  endsWith: function(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.lastIndexOf(pattern) === d;
  },

  empty: function() {
    return this == '';
  },

  blank: function() {
    return /^\s*$/.test(this);
  }
});

if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
  escapeHTML: function() {
    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  },
  unescapeHTML: function() {
    return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
  }
});

String.prototype.gsub.prepareReplacement = function(replacement) {
  if (typeof replacement == 'function') return replacement;
  var template = new Template(replacement);
  return function(match) { return template.evaluate(match) };
}

String.prototype.parseQuery = String.prototype.toQueryParams;

Object.extend(String.prototype.escapeHTML, {
  div:  document.createElement('div'),
  text: document.createTextNode('')
});

with (String.prototype.escapeHTML) div.appendChild(text);

var Template = Class.create();
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
Template.prototype = {
  initialize: function(template, pattern) {
    this.template = template.toString();
    this.pattern  = pattern || Template.Pattern;
  },

  evaluate: function(object) {
    return this.template.gsub(this.pattern, function(match) {
      var before = match[1];
      if (before == '\\') return match[2];
      return before + String.interpret(object[match[3]]);
    });
  }
}

var $break = {}, $continue = new Error('"throw $continue" is deprecated, use "return" instead');

var Enumerable = {
  each: function(iterator) {
    var index = 0;
    try {
      this._each(function(value) {
        iterator(value, index++);
      });
    } catch (e) {
      if (e != $break) throw e;
    }
    return this;
  },

  eachSlice: function(number, iterator) {
    var index = -number, slices = [], array = this.toArray();
    while ((index += number) < array.length)
      slices.push(array.slice(index, index+number));
    return slices.map(iterator);
  },

  all: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      result = result && !!(iterator || Prototype.K)(value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator) {
    var result = false;
    this.each(function(value, index) {
      if (result = !!(iterator || Prototype.K)(value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      results.push((iterator || Prototype.K)(value, index));
    });
    return results;
  },

  detect: function(iterator) {
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(pattern, iterator) {
    var results = [];
    this.each(function(value, index) {
      var stringValue = value.toString();
      if (stringValue.match(pattern))
        results.push((iterator || Prototype.K)(value, index));
    })
    return results;
  },

  include: function(object) {
    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },

  inGroupsOf: function(number, fillWith) {
    fillWith = fillWith === undefined ? null : fillWith;
    return this.eachSlice(number, function(slice) {
      while(slice.length < number) slice.push(fillWith);
      return slice;
    });
  },

  inject: function(memo, iterator) {
    this.each(function(value, index) {
      memo = iterator(memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.map(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (result == undefined || value >= result)
        result = value;
    });
    return result;
  },

  min: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (result == undefined || value < result)
        result = value;
    });
    return result;
  },

  partition: function(iterator) {
    var trues = [], falses = [];
    this.each(function(value, index) {
      ((iterator || Prototype.K)(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results = [];
    this.each(function(value, index) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator(value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator) {
    return this.map(function(value, index) {
      return {value: value, criteria: iterator(value, index)};
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.map();
  },

  zip: function() {
    var iterator = Prototype.K, args = $A(arguments);
    if (typeof args.last() == 'function')
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      return iterator(collections.pluck(index));
    });
  },

  size: function() {
    return this.toArray().length;
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
}

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray
});
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0, length = iterable.length; i < length; i++)
      results.push(iterable[i]);
    return results;
  }
}

if (Prototype.Browser.WebKit) {
  $A = Array.from = function(iterable) {
    if (!iterable) return [];
    if (!(typeof iterable == 'function' && iterable == '[object NodeList]') &&
      iterable.toArray) {
      return iterable.toArray();
    } else {
      var results = [];
      for (var i = 0, length = iterable.length; i < length; i++)
        results.push(iterable[i]);
      return results;
    }
  }
}

Object.extend(Array.prototype, Enumerable);

if (!Array.prototype._reverse)
  Array.prototype._reverse = Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0, length = this.length; i < length; i++)
      iterator(this[i]);
  },

  clear: function() {
    this.length = 0;
    return this;
  },

  first: function() {
    return this[0];
  },

  last: function() {
    return this[this.length - 1];
  },

  compact: function() {
    return this.select(function(value) {
      return value != null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(value && value.constructor == Array ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values = $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  indexOf: function(object) {
    for (var i = 0, length = this.length; i < length; i++)
      if (this[i] == object) return i;
    return -1;
  },

  reverse: function(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  },

  reduce: function() {
    return this.length > 1 ? this : this[0];
  },

  uniq: function(sorted) {
    return this.inject([], function(array, value, index) {
      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
        array.push(value);
      return array;
    });
  },

  clone: function() {
    return [].concat(this);
  },

  size: function() {
    return this.length;
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  },

  toJSON: function() {
    var results = [];
    this.each(function(object) {
      var value = Object.toJSON(object);
      if (value !== undefined) results.push(value);
    });
    return '[' + results.join(', ') + ']';
  }
});

Array.prototype.toArray = Array.prototype.clone;

function $w(string) {
  string = string.strip();
  return string ? string.split(/\s+/) : [];
}

if (Prototype.Browser.Opera){
  Array.prototype.concat = function() {
    var array = [];
    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
    for (var i = 0, length = arguments.length; i < length; i++) {
      if (arguments[i].constructor == Array) {
        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
          array.push(arguments[i][j]);
      } else {
        array.push(arguments[i]);
      }
    }
    return array;
  }
}
var Hash = function(object) {
  if (object instanceof Hash) this.merge(object);
  else Object.extend(this, object || {});
};

Object.extend(Hash, {
  toQueryString: function(obj) {
    var parts = [];
    parts.add = arguments.callee.addPair;

    this.prototype._each.call(obj, function(pair) {
      if (!pair.key) return;
      var value = pair.value;

      if (value && typeof value == 'object') {
        if (value.constructor == Array) value.each(function(value) {
          parts.add(pair.key, value);
        });
        return;
      }
      parts.add(pair.key, value);
    });

    return parts.join('&');
  },

  toJSON: function(object) {
    var results = [];
    this.prototype._each.call(object, function(pair) {
      var value = Object.toJSON(pair.value);
      if (value !== undefined) results.push(pair.key.toJSON() + ': ' + value);
    });
    return '{' + results.join(', ') + '}';
  }
});

Hash.toQueryString.addPair = function(key, value, prefix) {
  key = encodeURIComponent(key);
  if (value === undefined) this.push(key);
  else this.push(key + '=' + (value == null ? '' : encodeURIComponent(value)));
}

Object.extend(Hash.prototype, Enumerable);
Object.extend(Hash.prototype, {
  _each: function(iterator) {
    for (var key in this) {
      var value = this[key];
      if (value && value == Hash.prototype[key]) continue;

      var pair = [key, value];
      pair.key = key;
      pair.value = value;
      iterator(pair);
    }
  },

  keys: function() {
    return this.pluck('key');
  },

  values: function() {
    return this.pluck('value');
  },

  merge: function(hash) {
    return $H(hash).inject(this, function(mergedHash, pair) {
      mergedHash[pair.key] = pair.value;
      return mergedHash;
    });
  },

  remove: function() {
    var result;
    for(var i = 0, length = arguments.length; i < length; i++) {
      var value = this[arguments[i]];
      if (value !== undefined){
        if (result === undefined) result = value;
        else {
          if (result.constructor != Array) result = [result];
          result.push(value)
        }
      }
      delete this[arguments[i]];
    }
    return result;
  },

  toQueryString: function() {
    return Hash.toQueryString(this);
  },

  inspect: function() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  },

  toJSON: function() {
    return Hash.toJSON(this);
  }
});

function $H(object) {
  if (object instanceof Hash) return object;
  return new Hash(object);
};

// Safari iterates over shadowed properties
if (function() {
  var i = 0, Test = function(value) { this.key = value };
  Test.prototype.key = 'foo';
  for (var property in new Test('bar')) i++;
  return i > 1;
}()) Hash.prototype._each = function(iterator) {
  var cache = [];
  for (var key in this) {
    var value = this[key];
    if ((value && value == Hash.prototype[key]) || cache.include(key)) continue;
    cache.push(key);
    var pair = [key, value];
    pair.key = key;
    pair.value = value;
    iterator(pair);
  }
};
ObjectRange = Class.create();
Object.extend(ObjectRange.prototype, Enumerable);
Object.extend(ObjectRange.prototype, {
  initialize: function(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  },

  _each: function(iterator) {
    var value = this.start;
    while (this.include(value)) {
      iterator(value);
      value = value.succ();
    }
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }
});

var $R = function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
}

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },

  activeRequestCount: 0
}

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responder) {
    if (!this.include(responder))
      this.responders.push(responder);
  },

  unregister: function(responder) {
    this.responders = this.responders.without(responder);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (typeof responder[callback] == 'function') {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) {}
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate: function() {
    Ajax.activeRequestCount++;
  },
  onComplete: function() {
    Ajax.activeRequestCount--;
  }
});

Ajax.Base = function() {};
Ajax.Base.prototype = {
  setOptions: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      contentType:  'application/x-www-form-urlencoded',
      encoding:     'UTF-8',
      parameters:   ''
    }
    Object.extend(this.options, options || {});

    this.options.method = this.options.method.toLowerCase();
    if (typeof this.options.parameters == 'string')
      this.options.parameters = this.options.parameters.toQueryParams();
  }
}

Ajax.Request = Class.create();
Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
  _complete: false,

  initialize: function(url, options) {
    this.transport = Ajax.getTransport();
    this.setOptions(options);
    this.request(url);
  },

  request: function(url) {
    this.url = url;
    this.method = this.options.method;
    var params = Object.clone(this.options.parameters);

    if (!['get', 'post'].include(this.method)) {
      // simulate other verbs over post
      params['_method'] = this.method;
      this.method = 'post';
    }

    this.parameters = params;

    if (params = Hash.toQueryString(params)) {
      // when GET, append parameters to URL
      if (this.method == 'get')
        this.url += (this.url.include('?') ? '&' : '?') + params;
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
        params += '&_=';
    }

    try {
      if (this.options.onCreate) this.options.onCreate(this.transport);
      Ajax.Responders.dispatch('onCreate', this, this.transport);

      this.transport.open(this.method.toUpperCase(), this.url,
        this.options.asynchronous);

      if (this.options.asynchronous)
        setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);

      this.transport.onreadystatechange = this.onStateChange.bind(this);
      this.setRequestHeaders();

      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
      this.transport.send(this.body);

      /* Force Firefox to handle ready state 4 for synchronous requests */
      if (!this.options.asynchronous && this.transport.overrideMimeType)
        this.onStateChange();

    }
    catch (e) {
      this.dispatchException(e);
    }
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState > 1 && !((readyState == 4) && this._complete))
      this.respondToReadyState(this.transport.readyState);
  },

  //setRequestHeaders: function() {
  // var headers = {
  //    'X-Requested-With': 'XMLHttpRequest',
  //    'X-Prototype-Version': Prototype.Version,
  //    'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
  //  };
	setRequestHeaders: function() {
	var headers = {
	'If-Modified-Since': 'Thu, 1 Jan 1970 00:00:00 GMT',
	'X-Requested-With': 'XMLHttpRequest',
	'X-Prototype-Version': Prototype.Version,
	'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
	}; 
    if (this.method == 'post') {
      headers['Content-type'] = this.options.contentType +
        (this.options.encoding ? '; charset=' + this.options.encoding : '');

      /* Force "Connection: close" for older Mozilla browsers to work
       * around a bug where XMLHttpRequest sends an incorrect
       * Content-length header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType &&
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
            headers['Connection'] = 'close';
    }

    // user-defined headers
    if (typeof this.options.requestHeaders == 'object') {
      var extras = this.options.requestHeaders;

      if (typeof extras.push == 'function')
        for (var i = 0, length = extras.length; i < length; i += 2)
          headers[extras[i]] = extras[i+1];
      else
        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
    }

    for (var name in headers)
      this.transport.setRequestHeader(name, headers[name]);
  },

  success: function() {
    return !this.transport.status
        || (this.transport.status >= 200 && this.transport.status < 300);
  },

  respondToReadyState: function(readyState) {
    var state = Ajax.Request.Events[readyState];
    var transport = this.transport, json = this.evalJSON();

    if (state == 'Complete') {
      try {
        this._complete = true;
        (this.options['on' + this.transport.status]
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(transport, json);
      } catch (e) {
        this.dispatchException(e);
      }

      var contentType = this.getHeader('Content-type');
      if (contentType && contentType.strip().
        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
          this.evalResponse();
    }

    try {
      (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
      Ajax.Responders.dispatch('on' + state, this, transport, json);
    } catch (e) {
      this.dispatchException(e);
    }

    if (state == 'Complete') {
      // avoid memory leak in MSIE: clean up
      this.transport.onreadystatechange = Prototype.emptyFunction;
    }
  },

  getHeader: function(name) {
    try {
      return this.transport.getResponseHeader(name);
    } catch (e) { return null }
  },

  evalJSON: function() {
    try {
      var json = this.getHeader('X-JSON');
      return json ? json.evalJSON() : null;
    } catch (e) { return null }
  },

  evalResponse: function() {
    try {
      return eval((this.transport.responseText || '').unfilterJSON());
    } catch (e) {
      this.dispatchException(e);
    }
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Updater = Class.create();

Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
  initialize: function(container, url, options) {
    this.container = {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : container))
    }

    this.transport = Ajax.getTransport();
    this.setOptions(options);

    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, param) {
      this.updateContent();
      onComplete(transport, param);
    }).bind(this);

    this.request(url);
  },

  updateContent: function() {
    var receiver = this.container[this.success() ? 'success' : 'failure'];
    var response = this.transport.responseText;

    if (!this.options.evalScripts) response = response.stripScripts();

    if (receiver = $(receiver)) {
      if (this.options.insertion)
        new this.options.insertion(receiver, response);
      else
        receiver.update(response);
    }

    if (this.success()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create();
Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(container, url, options) {
    this.setOptions(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = {};
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(request) {
    if (this.options.decay) {
      this.decay = (request.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = request.responseText;
    }
    this.timer = setTimeout(this.onTimerEvent.bind(this),
      this.decay * this.frequency * 1000);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});
function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (typeof element == 'string')
    element = document.getElementById(element);
  return Element.extend(element);
}

if (Prototype.BrowserFeatures.XPath) {
  document._getElementsByXPath = function(expression, parentElement) {
    var results = [];
    var query = document.evaluate(expression, $(parentElement) || document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, length = query.snapshotLength; i < length; i++)
      results.push(query.snapshotItem(i));
    return results;
  };

  document.getElementsByClassName = function(className, parentElement) {
    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
    return document._getElementsByXPath(q, parentElement);
  }

} else document.getElementsByClassName = function(className, parentElement) {
  var children = ($(parentElement) || document.body).getElementsByTagName('*');
  var elements = [], child, pattern = new RegExp("(^|\\s)" + className + "(\\s|$)");
  for (var i = 0, length = children.length; i < length; i++) {
    child = children[i];
    var elementClassName = child.className;
    if (elementClassName.length == 0) continue;
    if (elementClassName == className || elementClassName.match(pattern))
      elements.push(Element.extend(child));
  }
  return elements;
};

/*--------------------------------------------------------------------------*/

if (!window.Element) var Element = {};

Element.extend = function(element) {
  var F = Prototype.BrowserFeatures;
  if (!element || !element.tagName || element.nodeType == 3 ||
   element._extended || F.SpecificElementExtensions || element == window)
    return element;

  var methods = {}, tagName = element.tagName, cache = Element.extend.cache,
   T = Element.Methods.ByTag;

  // extend methods for all tags (Safari doesn't need this)
  if (!F.ElementExtensions) {
    Object.extend(methods, Element.Methods),
    Object.extend(methods, Element.Methods.Simulated);
  }

  // extend methods for specific tags
  if (T[tagName]) Object.extend(methods, T[tagName]);

  for (var property in methods) {
    var value = methods[property];
    if (typeof value == 'function' && !(property in element))
      element[property] = cache.findOrStore(value);
  }

  element._extended = Prototype.emptyFunction;
  return element;
};

Element.extend.cache = {
  findOrStore: function(value) {
    return this[value] = this[value] || function() {
      return value.apply(null, [this].concat($A(arguments)));
    }
  }
};

Element.Methods = {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function(element) {
    element = $(element);
    Element[Element.visible(element) ? 'hide' : 'show'](element);
    return element;
  },

  hide: function(element) {
    $(element).style.display = 'none';
    return element;
  },

  show: function(element) {
    $(element).style.display = '';
    return element;
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
    return element;
  },

  update: function(element, html) {
    html = typeof html == 'undefined' ? '' : html.toString();
    $(element).innerHTML = html.stripScripts();
    setTimeout(function() {html.evalScripts()}, 10);
    return element;
  },

  replace: function(element, html) {
    element = $(element);
    html = typeof html == 'undefined' ? '' : html.toString();
    if (element.outerHTML) {
      element.outerHTML = html.stripScripts();
    } else {
      var range = element.ownerDocument.createRange();
      range.selectNodeContents(element);
      element.parentNode.replaceChild(
        range.createContextualFragment(html.stripScripts()), element);
    }
    setTimeout(function() {html.evalScripts()}, 10);
    return element;
  },

  inspect: function(element) {
    element = $(element);
    var result = '<' + element.tagName.toLowerCase();
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
      var property = pair.first(), attribute = pair.last();
      var value = (element[property] || '').toString();
      if (value) result += ' ' + attribute + '=' + value.inspect(true);
    });
    return result + '>';
  },

  recursivelyCollect: function(element, property) {
    element = $(element);
    var elements = [];
    while (element = element[property])
      if (element.nodeType == 1)
        elements.push(Element.extend(element));
    return elements;
  },

  ancestors: function(element) {
    return $(element).recursivelyCollect('parentNode');
  },

  descendants: function(element) {
    return $A($(element).getElementsByTagName('*')).each(Element.extend);
  },

  firstDescendant: function(element) {
    element = $(element).firstChild;
    while (element && element.nodeType != 1) element = element.nextSibling;
    return $(element);
  },

  immediateDescendants: function(element) {
    if (!(element = $(element).firstChild)) return [];
    while (element && element.nodeType != 1) element = element.nextSibling;
    if (element) return [element].concat($(element).nextSiblings());
    return [];
  },

  previousSiblings: function(element) {
    return $(element).recursivelyCollect('previousSibling');
  },

  nextSiblings: function(element) {
    return $(element).recursivelyCollect('nextSibling');
  },

  siblings: function(element) {
    element = $(element);
    return element.previousSiblings().reverse().concat(element.nextSiblings());
  },

  match: function(element, selector) {
    if (typeof selector == 'string')
      selector = new Selector(selector);
    return selector.match($(element));
  },

  up: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(element.parentNode);
    var ancestors = element.ancestors();
    return expression ? Selector.findElement(ancestors, expression, index) :
      ancestors[index || 0];
  },

  down: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return element.firstDescendant();
    var descendants = element.descendants();
    return expression ? Selector.findElement(descendants, expression, index) :
      descendants[index || 0];
  },

  previous: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
    var previousSiblings = element.previousSiblings();
    return expression ? Selector.findElement(previousSiblings, expression, index) :
      previousSiblings[index || 0];
  },

  next: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
    var nextSiblings = element.nextSiblings();
    return expression ? Selector.findElement(nextSiblings, expression, index) :
      nextSiblings[index || 0];
  },

  getElementsBySelector: function() {
    var args = $A(arguments), element = $(args.shift());
    return Selector.findChildElements(element, args);
  },

  getElementsByClassName: function(element, className) {
    return document.getElementsByClassName(className, element);
  },

  readAttribute: function(element, name) {
    element = $(element);
    if (Prototype.Browser.IE) {
      if (!element.attributes) return null;
      var t = Element._attributeTranslations;
      if (t.values[name]) return t.values[name](element, name);
      if (t.names[name])  name = t.names[name];
      var attribute = element.attributes[name];
      return attribute ? attribute.nodeValue : null;
    }
    return element.getAttribute(name);
  },

  getHeight: function(element) {
    return $(element).getDimensions().height;
  },

  getWidth: function(element) {
    return $(element).getDimensions().width;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    var elementClassName = element.className;
    if (elementClassName.length == 0) return false;
    if (elementClassName == className ||
        elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      return true;
    return false;
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    Element.classNames(element).add(className);
    return element;
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    Element.classNames(element).remove(className);
    return element;
  },

  toggleClassName: function(element, className) {
    if (!(element = $(element))) return;
    Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
    return element;
  },

  observe: function() {
    Event.observe.apply(Event, arguments);
    return $A(arguments).first();
  },

  stopObserving: function() {
    Event.stopObserving.apply(Event, arguments);
    return $A(arguments).first();
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element = $(element);
    var node = element.firstChild;
    while (node) {
      var nextNode = node.nextSibling;
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        element.removeChild(node);
      node = nextNode;
    }
    return element;
  },

  empty: function(element) {
    return $(element).innerHTML.blank();
  },

  descendantOf: function(element, ancestor) {
    element = $(element), ancestor = $(ancestor);
    while (element = element.parentNode)
      if (element == ancestor) return true;
    return false;
  },

  scrollTo: function(element) {
    element = $(element);
    var pos = Position.cumulativeOffset(element);
    window.scrollTo(pos[0], pos[1]);
    return element;
  },

  getStyle: function(element, style) {
    element = $(element);
    style = style == 'float' ? 'cssFloat' : style.camelize();
    var value = element.style[style];
    if (!value) {
      var css = document.defaultView.getComputedStyle(element, null);
      value = css ? css[style] : null;
    }
    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
    return value == 'auto' ? null : value;
  },

  getOpacity: function(element) {
    return $(element).getStyle('opacity');
  },

  setStyle: function(element, styles, camelized) {
    element = $(element);
    var elementStyle = element.style;

    for (var property in styles)
      if (property == 'opacity') element.setOpacity(styles[property])
      else
        elementStyle[(property == 'float' || property == 'cssFloat') ?
          (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
          (camelized ? property : property.camelize())] = styles[property];

    return element;
  },

  setOpacity: function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;
    return element;
  },

  getDimensions: function(element) {
    element = $(element);
    var display = $(element).getStyle('display');
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      // Opera returns the offset relative to the positioning context, when an
      // element is position relative but top and left have not been defined
      if (window.opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
    return element;
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
    return element;
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return element;
    element._overflow = element.style.overflow || 'auto';
    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
      element.style.overflow = 'hidden';
    return element;
  },

  undoClipping: function(element) {
    element = $(element);
    if (!element._overflow) return element;
    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
    element._overflow = null;
    return element;
  }
};

Object.extend(Element.Methods, {
  childOf: Element.Methods.descendantOf,
  childElements: Element.Methods.immediateDescendants
});

if (Prototype.Browser.Opera) {
  Element.Methods._getStyle = Element.Methods.getStyle;
  Element.Methods.getStyle = function(element, style) {
    switch(style) {
      case 'left':
      case 'top':
      case 'right':
      case 'bottom':
        if (Element._getStyle(element, 'position') == 'static') return null;
      default: return Element._getStyle(element, style);
    }
  };
}
else if (Prototype.Browser.IE) {
  Element.Methods.getStyle = function(element, style) {
    element = $(element);
    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
    var value = element.style[style];
    if (!value && element.currentStyle) value = element.currentStyle[style];

    if (style == 'opacity') {
      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
        if (value[1]) return parseFloat(value[1]) / 100;
      return 1.0;
    }

    if (value == 'auto') {
      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
        return element['offset'+style.capitalize()] + 'px';
      return null;
    }
    return value;
  };

  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    var filter = element.getStyle('filter'), style = element.style;
    if (value == 1 || value === '') {
      style.filter = filter.replace(/alpha\([^\)]*\)/gi,'');
      return element;
    } else if (value < 0.00001) value = 0;
    style.filter = filter.replace(/alpha\([^\)]*\)/gi, '') +
      'alpha(opacity=' + (value * 100) + ')';
    return element;
  };

  // IE is missing .innerHTML support for TABLE-related elements
  Element.Methods.update = function(element, html) {
    element = $(element);
    html = typeof html == 'undefined' ? '' : html.toString();
    var tagName = element.tagName.toUpperCase();
    if (['THEAD','TBODY','TR','TD'].include(tagName)) {
      var div = document.createElement('div');
      switch (tagName) {
        case 'THEAD':
        case 'TBODY':
          div.innerHTML = '<table><tbody>' +  html.stripScripts() + '</tbody></table>';
          depth = 2;
          break;
        case 'TR':
          div.innerHTML = '<table><tbody><tr>' +  html.stripScripts() + '</tr></tbody></table>';
          depth = 3;
          break;
        case 'TD':
          div.innerHTML = '<table><tbody><tr><td>' +  html.stripScripts() + '</td></tr></tbody></table>';
          depth = 4;
      }
      $A(element.childNodes).each(function(node) { element.removeChild(node) });
      depth.times(function() { div = div.firstChild });
      $A(div.childNodes).each(function(node) { element.appendChild(node) });
    } else {
      element.innerHTML = html.stripScripts();
    }
    setTimeout(function() { html.evalScripts() }, 10);
    return element;
  }
}
else if (Prototype.Browser.Gecko) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1) ? 0.999999 :
      (value === '') ? '' : (value < 0.00001) ? 0 : value;
    return element;
  };
}

Element._attributeTranslations = {
  names: {
    colspan:   "colSpan",
    rowspan:   "rowSpan",
    valign:    "vAlign",
    datetime:  "dateTime",
    accesskey: "accessKey",
    tabindex:  "tabIndex",
    enctype:   "encType",
    maxlength: "maxLength",
    readonly:  "readOnly",
    longdesc:  "longDesc"
  },
  values: {
    _getAttr: function(element, attribute) {
      return element.getAttribute(attribute, 2);
    },
    _flag: function(element, attribute) {
      return $(element).hasAttribute(attribute) ? attribute : null;
    },
    style: function(element) {
      return element.style.cssText.toLowerCase();
    },
    title: function(element) {
      var node = element.getAttributeNode('title');
      return node.specified ? node.nodeValue : null;
    }
  }
};

(function() {
  Object.extend(this, {
    href: this._getAttr,
    src:  this._getAttr,
    type: this._getAttr,
    disabled: this._flag,
    checked:  this._flag,
    readonly: this._flag,
    multiple: this._flag
  });
}).call(Element._attributeTranslations.values);

Element.Methods.Simulated = {
  hasAttribute: function(element, attribute) {
    var t = Element._attributeTranslations, node;
    attribute = t.names[attribute] || attribute;
    node = $(element).getAttributeNode(attribute);
    return node && node.specified;
  }
};

Element.Methods.ByTag = {};

Object.extend(Element, Element.Methods);

if (!Prototype.BrowserFeatures.ElementExtensions &&
 document.createElement('div').__proto__) {
  window.HTMLElement = {};
  window.HTMLElement.prototype = document.createElement('div').__proto__;
  Prototype.BrowserFeatures.ElementExtensions = true;
}

Element.hasAttribute = function(element, attribute) {
  if (element.hasAttribute) return element.hasAttribute(attribute);
  return Element.Methods.Simulated.hasAttribute(element, attribute);
};

Element.addMethods = function(methods) {
  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;

  if (!methods) {
    Object.extend(Form, Form.Methods);
    Object.extend(Form.Element, Form.Element.Methods);
    Object.extend(Element.Methods.ByTag, {
      "FORM":     Object.clone(Form.Methods),
      "INPUT":    Object.clone(Form.Element.Methods),
      "SELECT":   Object.clone(Form.Element.Methods),
      "TEXTAREA": Object.clone(Form.Element.Methods)
    });
  }

  if (arguments.length == 2) {
    var tagName = methods;
    methods = arguments[1];
  }

  if (!tagName) Object.extend(Element.Methods, methods || {});
  else {
    if (tagName.constructor == Array) tagName.each(extend);
    else extend(tagName);
  }

  function extend(tagName) {
    tagName = tagName.toUpperCase();
    if (!Element.Methods.ByTag[tagName])
      Element.Methods.ByTag[tagName] = {};
    Object.extend(Element.Methods.ByTag[tagName], methods);
  }

  function copy(methods, destination, onlyIfAbsent) {
    onlyIfAbsent = onlyIfAbsent || false;
    var cache = Element.extend.cache;
    for (var property in methods) {
      var value = methods[property];
      if (!onlyIfAbsent || !(property in destination))
        destination[property] = cache.findOrStore(value);
    }
  }

  function findDOMClass(tagName) {
    var klass;
    var trans = {
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
      "FrameSet", "IFRAME": "IFrame"
    };
    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName.capitalize() + 'Element';
    if (window[klass]) return window[klass];

    window[klass] = {};
    window[klass].prototype = document.createElement(tagName).__proto__;
    return window[klass];
  }

  if (F.ElementExtensions) {
    copy(Element.Methods, HTMLElement.prototype);
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
  }

  if (F.SpecificElementExtensions) {
    for (var tag in Element.Methods.ByTag) {
      var klass = findDOMClass(tag);
      if (typeof klass == "undefined") continue;
      copy(T[tag], klass.prototype);
    }
  }

  Object.extend(Element, Element.Methods);
  delete Element.ByTag;
};

var Toggle = { display: Element.toggle };

/*--------------------------------------------------------------------------*/

Abstract.Insertion = function(adjacency) {
  this.adjacency = adjacency;
}

Abstract.Insertion.prototype = {
  initialize: function(element, content) {
    this.element = $(element);
    this.content = content.stripScripts();

    if (this.adjacency && this.element.insertAdjacentHTML) {
      try {
        this.element.insertAdjacentHTML(this.adjacency, this.content);
      } catch (e) {
        var tagName = this.element.tagName.toUpperCase();
        if (['TBODY', 'TR'].include(tagName)) {
          this.insertContent(this.contentFromAnonymousTable());
        } else {
          throw e;
        }
      }
    } else {
      this.range = this.element.ownerDocument.createRange();
      if (this.initializeRange) this.initializeRange();
      this.insertContent([this.range.createContextualFragment(this.content)]);
    }

    setTimeout(function() {content.evalScripts()}, 10);
  },

  contentFromAnonymousTable: function() {
    var div = document.createElement('div');
    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
    return $A(div.childNodes[0].childNodes[0].childNodes);
  }
}

var Insertion = new Object();

Insertion.Before = Class.create();
Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
  initializeRange: function() {
    this.range.setStartBefore(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment, this.element);
    }).bind(this));
  }
});

Insertion.Top = Class.create();
Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(true);
  },

  insertContent: function(fragments) {
    fragments.reverse(false).each((function(fragment) {
      this.element.insertBefore(fragment, this.element.firstChild);
    }).bind(this));
  }
});

Insertion.Bottom = Class.create();
Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.appendChild(fragment);
    }).bind(this));
  }
});

Insertion.After = Class.create();
Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
  initializeRange: function() {
    this.range.setStartAfter(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment,
        this.element.nextSibling);
    }).bind(this));
  }
});

/*--------------------------------------------------------------------------*/

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set($A(this).concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set($A(this).without(classNameToRemove).join(' '));
  },

  toString: function() {
    return $A(this).join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);
/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
 * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
 * license.  Please see http://www.yui-ext.com/ for more information. */

var Selector = Class.create();

Selector.prototype = {
  initialize: function(expression) {
    this.expression = expression.strip();
    this.compileMatcher();
  },

  compileMatcher: function() {
    // Selectors with namespaced attributes can't use the XPath version
    if (Prototype.BrowserFeatures.XPath && !(/\[[\w-]*?:/).test(this.expression))
      return this.compileXPathMatcher();

    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
        c = Selector.criteria, le, p, m;

    if (Selector._cache[e]) {
      this.matcher = Selector._cache[e]; return;
    }
    this.matcher = ["this.matcher = function(root) {",
                    "var r = root, h = Selector.handlers, c = false, n;"];

    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i in ps) {
        p = ps[i];
        if (m = e.match(p)) {
          this.matcher.push(typeof c[i] == 'function' ? c[i](m) :
    	      new Template(c[i]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.matcher.push("return h.unique(n);\n}");
    eval(this.matcher.join('\n'));
    Selector._cache[this.expression] = this.matcher;
  },

  compileXPathMatcher: function() {
    var e = this.expression, ps = Selector.patterns,
        x = Selector.xpath, le,  m;

    if (Selector._cache[e]) {
      this.xpath = Selector._cache[e]; return;
    }

    this.matcher = ['.//*'];
    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i in ps) {
        if (m = e.match(ps[i])) {
          this.matcher.push(typeof x[i] == 'function' ? x[i](m) :
            new Template(x[i]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.xpath = this.matcher.join('');
    Selector._cache[this.expression] = this.xpath;
  },

  findElements: function(root) {
    root = root || document;
    if (this.xpath) return document._getElementsByXPath(this.xpath, root);
    return this.matcher(root);
  },

  match: function(element) {
    return this.findElements(document).include(element);
  },

  toString: function() {
    return this.expression;
  },

  inspect: function() {
    return "#<Selector:" + this.expression.inspect() + ">";
  }
};

Object.extend(Selector, {
  _cache: {},

  xpath: {
    descendant:   "//*",
    child:        "/*",
    adjacent:     "/following-sibling::*[1]",
    laterSibling: '/following-sibling::*',
    tagName:      function(m) {
      if (m[1] == '*') return '';
      return "[local-name()='" + m[1].toLowerCase() +
             "' or local-name()='" + m[1].toUpperCase() + "']";
    },
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
    id:           "[@id='#{1}']",
    attrPresence: "[@#{1}]",
    attr: function(m) {
      m[3] = m[5] || m[6];
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
    },
    pseudo: function(m) {
      var h = Selector.xpath.pseudos[m[1]];
      if (!h) return '';
      if (typeof h === 'function') return h(m);
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
    },
    operators: {
      '=':  "[@#{1}='#{3}']",
      '!=': "[@#{1}!='#{3}']",
      '^=': "[starts-with(@#{1}, '#{3}')]",
      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
      '*=': "[contains(@#{1}, '#{3}')]",
      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
    },
    pseudos: {
      'first-child': '[not(preceding-sibling::*)]',
      'last-child':  '[not(following-sibling::*)]',
      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
      'empty':       "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
      'checked':     "[@checked]",
      'disabled':    "[@disabled]",
      'enabled':     "[not(@disabled)]",
      'not': function(m) {
        var e = m[6], p = Selector.patterns,
            x = Selector.xpath, le, m, v;

        var exclusion = [];
        while (e && le != e && (/\S/).test(e)) {
          le = e;
          for (var i in p) {
            if (m = e.match(p[i])) {
              v = typeof x[i] == 'function' ? x[i](m) : new Template(x[i]).evaluate(m);
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
              e = e.replace(m[0], '');
              break;
            }
          }
        }
        return "[not(" + exclusion.join(" and ") + ")]";
      },
      'nth-child':      function(m) {
        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
      },
      'nth-last-child': function(m) {
        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
      },
      'nth-of-type':    function(m) {
        return Selector.xpath.pseudos.nth("position() ", m);
      },
      'nth-last-of-type': function(m) {
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
      },
      'first-of-type':  function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
      },
      'last-of-type':   function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
      },
      'only-of-type':   function(m) {
        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
      },
      nth: function(fragment, m) {
        var mm, formula = m[6], predicate;
        if (formula == 'even') formula = '2n+0';
        if (formula == 'odd')  formula = '2n+1';
        if (mm = formula.match(/^(\d+)$/)) // digit only
          return '[' + fragment + "= " + mm[1] + ']';
        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
          if (mm[1] == "-") mm[1] = -1;
          var a = mm[1] ? Number(mm[1]) : 1;
          var b = mm[2] ? Number(mm[2]) : 0;
          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
          "((#{fragment} - #{b}) div #{a} >= 0)]";
          return new Template(predicate).evaluate({
            fragment: fragment, a: a, b: b });
        }
      }
    }
  },

  criteria: {
    tagName:      'n = h.tagName(n, r, "#{1}", c);   c = false;',
    className:    'n = h.className(n, r, "#{1}", c); c = false;',
    id:           'n = h.id(n, r, "#{1}", c);        c = false;',
    attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
    attr: function(m) {
      m[3] = (m[5] || m[6]);
      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
    },
    pseudo:       function(m) {
      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
    },
    descendant:   'c = "descendant";',
    child:        'c = "child";',
    adjacent:     'c = "adjacent";',
    laterSibling: 'c = "laterSibling";'
  },

  patterns: {
    // combinators must be listed first
    // (and descendant needs to be last combinator)
    laterSibling: /^\s*~\s*/,
    child:        /^\s*>\s*/,
    adjacent:     /^\s*\+\s*/,
    descendant:   /^\s/,

    // selectors follow
    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
    id:           /^#([\w\-\*]+)(\b|$)/,
    className:    /^\.([\w\-\*]+)(\b|$)/,
    pseudo:       /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|\s|(?=:))/,
    attrPresence: /^\[([\w]+)\]/,
    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\]]*?)\4|([^'"][^\]]*?)))?\]/
  },

  handlers: {
    // UTILITY FUNCTIONS
    // joins two collections
    concat: function(a, b) {
      for (var i = 0, node; node = b[i]; i++)
        a.push(node);
      return a;
    },

    // marks an array of nodes for counting
    mark: function(nodes) {
      for (var i = 0, node; node = nodes[i]; i++)
        node._counted = true;
      return nodes;
    },

    unmark: function(nodes) {
      for (var i = 0, node; node = nodes[i]; i++)
        node._counted = undefined;
      return nodes;
    },

    // mark each child node with its position (for nth calls)
    // "ofType" flag indicates whether we're indexing for nth-of-type
    // rather than nth-child
    index: function(parentNode, reverse, ofType) {
      parentNode._counted = true;
      if (reverse) {
        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
          node = nodes[i];
          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
        }
      } else {
        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
      }
    },

    // filters out duplicates and extends all nodes
    unique: function(nodes) {
      if (nodes.length == 0) return nodes;
      var results = [], n;
      for (var i = 0, l = nodes.length; i < l; i++)
        if (!(n = nodes[i])._counted) {
          n._counted = true;
          results.push(Element.extend(n));
        }
      return Selector.handlers.unmark(results);
    },

    // COMBINATOR FUNCTIONS
    descendant: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, node.getElementsByTagName('*'));
      return results;
    },

    child: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
      }
      return results;
    },

    adjacent: function(nodes) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        var next = this.nextElementSibling(node);
        if (next) results.push(next);
      }
      return results;
    },

    laterSibling: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, Element.nextSiblings(node));
      return results;
    },

    nextElementSibling: function(node) {
      while (node = node.nextSibling)
	      if (node.nodeType == 1) return node;
      return null;
    },

    previousElementSibling: function(node) {
      while (node = node.previousSibling)
        if (node.nodeType == 1) return node;
      return null;
    },

    // TOKEN FUNCTIONS
    tagName: function(nodes, root, tagName, combinator) {
      tagName = tagName.toUpperCase();
      var results = [], h = Selector.handlers;
      if (nodes) {
        if (combinator) {
          // fastlane for ordinary descendant combinators
          if (combinator == "descendant") {
            for (var i = 0, node; node = nodes[i]; i++)
              h.concat(results, node.getElementsByTagName(tagName));
            return results;
          } else nodes = this[combinator](nodes);
          if (tagName == "*") return nodes;
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.tagName.toUpperCase() == tagName) results.push(node);
        return results;
      } else return root.getElementsByTagName(tagName);
    },

    id: function(nodes, root, id, combinator) {
      var targetNode = $(id), h = Selector.handlers;
      if (!nodes && root == document) return targetNode ? [targetNode] : [];
      if (nodes) {
        if (combinator) {
          if (combinator == 'child') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (targetNode.parentNode == node) return [targetNode];
          } else if (combinator == 'descendant') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Element.descendantOf(targetNode, node)) return [targetNode];
          } else if (combinator == 'adjacent') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Selector.handlers.previousElementSibling(targetNode) == node)
                return [targetNode];
          } else nodes = h[combinator](nodes);
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node == targetNode) return [targetNode];
        return [];
      }
      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
    },

    className: function(nodes, root, className, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      return Selector.handlers.byClassName(nodes, root, className);
    },

    byClassName: function(nodes, root, className) {
      if (!nodes) nodes = Selector.handlers.descendant([root]);
      var needle = ' ' + className + ' ';
      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
        nodeClassName = node.className;
        if (nodeClassName.length == 0) continue;
        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
          results.push(node);
      }
      return results;
    },

    attrPresence: function(nodes, root, attr) {
      var results = [];
      for (var i = 0, node; node = nodes[i]; i++)
        if (Element.hasAttribute(node, attr)) results.push(node);
      return results;
    },

    attr: function(nodes, root, attr, value, operator) {
      if (!nodes) nodes = root.getElementsByTagName("*");
      var handler = Selector.operators[operator], results = [];
      for (var i = 0, node; node = nodes[i]; i++) {
        var nodeValue = Element.readAttribute(node, attr);
        if (nodeValue === null) continue;
        if (handler(nodeValue, value)) results.push(node);
      }
      return results;
    },

    pseudo: function(nodes, name, value, root, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      if (!nodes) nodes = root.getElementsByTagName("*");
      return Selector.pseudos[name](nodes, value, root);
    }
  },

  pseudos: {
    'first-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.previousElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'last-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.nextElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'only-child': function(nodes, value, root) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
          results.push(node);
      return results;
    },
    'nth-child':        function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root);
    },
    'nth-last-child':   function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true);
    },
    'nth-of-type':      function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, false, true);
    },
    'nth-last-of-type': function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true, true);
    },
    'first-of-type':    function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, false, true);
    },
    'last-of-type':     function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, true, true);
    },
    'only-of-type':     function(nodes, formula, root) {
      var p = Selector.pseudos;
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
    },

    // handles the an+b logic
    getIndices: function(a, b, total) {
      if (a == 0) return b > 0 ? [b] : [];
      return $R(1, total).inject([], function(memo, i) {
        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
        return memo;
      });
    },

    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
    nth: function(nodes, formula, root, reverse, ofType) {
      if (nodes.length == 0) return [];
      if (formula == 'even') formula = '2n+0';
      if (formula == 'odd')  formula = '2n+1';
      var h = Selector.handlers, results = [], indexed = [], m;
      h.mark(nodes);
      for (var i = 0, node; node = nodes[i]; i++) {
        if (!node.parentNode._counted) {
          h.index(node.parentNode, reverse, ofType);
          indexed.push(node.parentNode);
        }
      }
      if (formula.match(/^\d+$/)) { // just a number
        formula = Number(formula);
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.nodeIndex == formula) results.push(node);
      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
        if (m[1] == "-") m[1] = -1;
        var a = m[1] ? Number(m[1]) : 1;
        var b = m[2] ? Number(m[2]) : 0;
        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
          for (var j = 0; j < l; j++)
            if (node.nodeIndex == indices[j]) results.push(node);
        }
      }
      h.unmark(nodes);
      h.unmark(indexed);
      return results;
    },

    'empty': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        // IE treats comments as element nodes
        if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
        results.push(node);
      }
      return results;
    },

    'not': function(nodes, selector, root) {
      var h = Selector.handlers, selectorType, m;
      var exclusions = new Selector(selector).findElements(root);
      h.mark(exclusions);
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node._counted) results.push(node);
      h.unmark(exclusions);
      return results;
    },

    'enabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node.disabled) results.push(node);
      return results;
    },

    'disabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.disabled) results.push(node);
      return results;
    },

    'checked': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.checked) results.push(node);
      return results;
    }
  },

  operators: {
    '=':  function(nv, v) { return nv == v; },
    '!=': function(nv, v) { return nv != v; },
    '^=': function(nv, v) { return nv.startsWith(v); },
    '$=': function(nv, v) { return nv.endsWith(v); },
    '*=': function(nv, v) { return nv.include(v); },
    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
    '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
  },

  matchElements: function(elements, expression) {
    var matches = new Selector(expression).findElements(), h = Selector.handlers;
    h.mark(matches);
    for (var i = 0, results = [], element; element = elements[i]; i++)
      if (element._counted) results.push(element);
    h.unmark(matches);
    return results;
  },

  findElement: function(elements, expression, index) {
    if (typeof expression == 'number') {
      index = expression; expression = false;
    }
    return Selector.matchElements(elements, expression || '*')[index || 0];
  },

  findChildElements: function(element, expressions) {
    var exprs = expressions.join(','), expressions = [];
    exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
      expressions.push(m[1].strip());
    });
    var results = [], h = Selector.handlers;
    for (var i = 0, l = expressions.length, selector; i < l; i++) {
      selector = new Selector(expressions[i].strip());
      h.concat(results, selector.findElements(element));
    }
    return (l > 1) ? h.unique(results) : results;
  }
});

function $$() {
  return Selector.findChildElements(document, $A(arguments));
}
var Form = {
  reset: function(form) {
    $(form).reset();
    return form;
  },

  serializeElements: function(elements, getHash) {
    var data = elements.inject({}, function(result, element) {
      if (!element.disabled && element.name) {
        var key = element.name, value = $(element).getValue();
        if (value != null) {
         	if (key in result) {
            if (result[key].constructor != Array) result[key] = [result[key]];
            result[key].push(value);
          }
          else result[key] = value;
        }
      }
      return result;
    });

    return getHash ? data : Hash.toQueryString(data);
  }
};

Form.Methods = {
  serialize: function(form, getHash) {
    return Form.serializeElements(Form.getElements(form), getHash);
  },

  getElements: function(form) {
    return $A($(form).getElementsByTagName('*')).inject([],
      function(elements, child) {
        if (Form.Element.Serializers[child.tagName.toLowerCase()])
          elements.push(Element.extend(child));
        return elements;
      }
    );
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name) return $A(inputs).map(Element.extend);

    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) || (name && input.name != name))
        continue;
      matchingInputs.push(Element.extend(input));
    }

    return matchingInputs;
  },

  disable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('disable');
    return form;
  },

  enable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('enable');
    return form;
  },

  findFirstElement: function(form) {
    return $(form).getElements().find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    form = $(form);
    form.findFirstElement().activate();
    return form;
  },

  request: function(form, options) {
    form = $(form), options = Object.clone(options || {});

    var params = options.parameters;
    options.parameters = form.serialize(true);

    if (params) {
      if (typeof params == 'string') params = params.toQueryParams();
      Object.extend(options.parameters, params);
    }

    if (form.hasAttribute('method') && !options.method)
      options.method = form.method;

    return new Ajax.Request(form.readAttribute('action'), options);
  }
}

/*--------------------------------------------------------------------------*/

Form.Element = {
  focus: function(element) {
    $(element).focus();
    return element;
  },

  select: function(element) {
    $(element).select();
    return element;
  }
}

Form.Element.Methods = {
  serialize: function(element) {
    element = $(element);
    if (!element.disabled && element.name) {
      var value = element.getValue();
      if (value != undefined) {
        var pair = {};
        pair[element.name] = value;
        return Hash.toQueryString(pair);
      }
    }
    return '';
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    return Form.Element.Serializers[method](element);
  },

  clear: function(element) {
    $(element).value = '';
    return element;
  },

  present: function(element) {
    return $(element).value != '';
  },

  activate: function(element) {
    element = $(element);
    try {
      element.focus();
      if (element.select && (element.tagName.toLowerCase() != 'input' ||
        !['button', 'reset', 'submit'].include(element.type)))
        element.select();
    } catch (e) {}
    return element;
  },

  disable: function(element) {
    element = $(element);
    element.blur();
    element.disabled = true;
    return element;
  },

  enable: function(element) {
    element = $(element);
    element.disabled = false;
    return element;
  }
}

/*--------------------------------------------------------------------------*/

var Field = Form.Element;
var $F = Form.Element.Methods.getValue;

/*--------------------------------------------------------------------------*/

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
      default:
        return Form.Element.Serializers.textarea(element);
    }
  },

  inputSelector: function(element) {
    return element.checked ? element.value : null;
  },

  textarea: function(element) {
    return element.value;
  },

  select: function(element) {
    return this[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var index = element.selectedIndex;
    return index >= 0 ? this.optionValue(element.options[index]) : null;
  },

  selectMany: function(element) {
    var values, length = element.length;
    if (!length) return null;

    for (var i = 0, values = []; i < length; i++) {
      var opt = element.options[i];
      if (opt.selected) values.push(this.optionValue(opt));
    }
    return values;
  },

  optionValue: function(opt) {
    // extend element because hasAttribute may not be native
    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
  }
}

/*--------------------------------------------------------------------------*/

Abstract.TimedObserver = function() {}
Abstract.TimedObserver.prototype = {
  initialize: function(element, frequency, callback) {
    this.frequency = frequency;
    this.element   = $(element);
    this.callback  = callback;

    this.lastValue = this.getValue();
    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    var value = this.getValue();
    var changed = ('string' == typeof this.lastValue && 'string' == typeof value
      ? this.lastValue != value : String(this.lastValue) != String(value));
    if (changed) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
}

Form.Element.Observer = Class.create();
Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create();
Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = function() {}
Abstract.EventObserver.prototype = {
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    Form.getElements(this.element).each(this.registerCallback.bind(this));
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        default:
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
}

Form.Element.EventObserver = Class.create();
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create();
Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) {
  var Event = new Object();
}

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,
  KEY_HOME:     36,
  KEY_END:      35,
  KEY_PAGEUP:   33,
  KEY_PAGEDOWN: 34,

  element: function(event) {
    return $(event.target || event.srcElement);
  },

  isLeftClick: function(event) {
    return (((event.which) && (event.which == 1)) ||
            ((event.button) && (event.button == 1)));
  },

  pointerX: function(event) {
    return event.pageX || (event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft));
  },

  pointerY: function(event) {
    return event.pageY || (event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop));
  },

  stop: function(event) {
    if (event.preventDefault) {
      event.preventDefault();
      event.stopPropagation();
    } else {
      event.returnValue = false;
      event.cancelBubble = true;
    }
  },

  // find the first node with the given tagName, starting from the
  // node the event was triggered on; traverses the DOM upwards
  findElement: function(event, tagName) {
    var element = Event.element(event);
    while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() != tagName.toUpperCase())))
      element = element.parentNode;
    return element;
  },

  observers: false,

  _observeAndCache: function(element, name, observer, useCapture) {
    if (!this.observers) this.observers = [];
    if (element.addEventListener) {
      this.observers.push([element, name, observer, useCapture]);
      element.addEventListener(name, observer, useCapture);
    } else if (element.attachEvent) {
      this.observers.push([element, name, observer, useCapture]);
      element.attachEvent('on' + name, observer);
    }
  },

  unloadCache: function() {
    if (!Event.observers) return;
    for (var i = 0, length = Event.observers.length; i < length; i++) {
      Event.stopObserving.apply(this, Event.observers[i]);
      Event.observers[i][0] = null;
    }
    Event.observers = false;
  },

  observe: function(element, name, observer, useCapture) {
    element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
      (Prototype.Browser.WebKit || element.attachEvent))
      name = 'keydown';

    Event._observeAndCache(element, name, observer, useCapture);
  },

  stopObserving: function(element, name, observer, useCapture) {
    element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (Prototype.Browser.WebKit || element.attachEvent))
      name = 'keydown';

    if (element.removeEventListener) {
      element.removeEventListener(name, observer, useCapture);
    } else if (element.detachEvent) {
      try {
        element.detachEvent('on' + name, observer);
      } catch (e) {}
    }
  }
});

/* prevent memory leaks in IE */
if (Prototype.Browser.IE)
  Event.observe(window, 'unload', Event.unloadCache, false);
var Position = {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every time the
  // page is scrolled
  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  realOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return [valueL, valueT];
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return [valueL, valueT];
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        if(element.tagName=='BODY') break;
        var p = Element.getStyle(element, 'position');
        if (p == 'relative' || p == 'absolute') break;
      }
    } while (element);
    return [valueL, valueT];
  },

  offsetParent: function(element) {
    if (element.offsetParent) return element.offsetParent;
    if (element == document.body) return element;

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return element;

    return document.body;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = this.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = this.realOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = this.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  page: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent == document.body)
        if (Element.getStyle(element,'position')=='absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      if (!window.opera || element.tagName=='BODY') {
        valueT -= element.scrollTop  || 0;
        valueL -= element.scrollLeft || 0;
      }
    } while (element = element.parentNode);

    return [valueL, valueT];
  },

  clone: function(source, target) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || {})

    // find page position of source
    source = $(source);
    var p = Position.page(source);

    // find coordinate system to use
    target = $(target);
    var delta = [0, 0];
    var parent = null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(target,'position') == 'absolute') {
      parent = Position.offsetParent(target);
      delta = Position.page(parent);
    }

    // correct by body offsets (fixes Safari)
    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    // set position
    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
  },

  absolutize: function(element) {
    element = $(element);
    if (element.style.position == 'absolute') return;
    Position.prepare();

    var offsets = Position.positionedOffset(element);
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.width  = width + 'px';
    element.style.height = height + 'px';
  },

  relativize: function(element) {
    element = $(element);
    if (element.style.position == 'relative') return;
    Position.prepare();

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
  }
}

// Safari returns margins on body which is incorrect if the child is absolutely
// positioned.  For performance reasons, redefine Position.cumulativeOffset for
// KHTML/WebKit only.
if (Prototype.Browser.WebKit) {
  Position.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return [valueL, valueT];
  }
}

Element.addMethods();

function AjaxGetDivContent(div,url)
{
    $(div).innerHTML = "<img src='/images/loading.gif'/> đang tải dữ liệu";          
    new Ajax.Request(url,
    {
	    method:'get',
	    evalScripts: true,			   		   
	    onSuccess: function(transport)
	    {
	        var response = transport.responseText;				      
		    $(div).innerHTML = response;			
	    },
	    onFailure: function(){ alert('Có lỗi xảy ra..'); }			  
    });
    return true;
}






/**
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;






//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '';
  if (isIE && isWin && !isOpera)
  {
    str += '<object ';
    for (var i in objAttrs)
    {
      str += i + '="' + objAttrs[i] + '" ';
    }
    str += '>';
    for (var i in params)
    {
      str += '<param name="' + i + '" value="' + params[i] + '" /> ';
    }
    str += '</object>';
  }
  else
  {
    str += '<embed ';
    for (var i in embedAttrs)
    {
      str += i + '="' + embedAttrs[i] + '" ';
    }
    str += '> </embed>';
  }

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "id":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}










var TimeSpan_isVisit = new Array(0, 0, 30); // 0 ngay, 0 gio, 30 phut
var TimeSpan_isUnique = new Array(1, 0, 0); // 1 ngay, 0 gio, 0 phut
var TimeSpan_isNewVisit = new Array(365, 0, 0); // 365 ngay, 0 gio, 0 phut
var TimeSpan_Persistance = new Array(365, 0, 0); // mai mai...
var Log_ArticleId, Log_ArticleName, Log_CatId, Log_CatName;
function timeSpanToMillisecond(timeSpan)
{
	return ((timeSpan[0]*24 + timeSpan[1])*60 + timeSpan[2])*60000;
}
/*************************************************************************************/

function Log_Querystring(qs) { // optionally pass a querystring to parse
	this.params = {};
	
	if (qs == null) qs = location.search.substring(1, location.search.length);
	if (qs.length == 0) return;

	qs = qs.replace(/\+/g, ' ');
	var args = qs.split('&');
	
	for (var i = 0; i < args.length; i++) {
		var pair = args[i].split('=');
		var name = decodeURIComponent(pair[0]);
		
		var value = (pair.length==2)
			? decodeURIComponent(pair[1])
			: name;
		
		this.params[name] = value;
	}
}

Log_Querystring.prototype.get = function(key, default_) {
	var value = this.params[key];
	return (value != null) ? value : default_;
}

Log_Querystring.prototype.contains = function(key) {
	var value = this.params[key];
	return (value != null);
}



function Log_AssignValue(articleId, articleTitle, catId, catName)
{
	Log_ArticleId = articleId;
	Log_ArticleName = articleTitle;
	Log_CatId = catId;
	Log_CatName = catName;
	Log_callLogger();
	if(catName.indexOf("dong-su-kien/")==-1 || catName.indexOf("tags/")==-1)
	    Log_AssignValue_v2(articleId,articleTitle,catId,catName,1,false);
}
function Log_getOS()
{
	var os = window.navigator.userAgent;
	
	if (os.indexOf('Windows NT 5.1') >= 0)
		os = 'Windows XP';
	else if (os.indexOf('Windows NT 5.2') >= 0)
		os = 'Windows Server 2003';
	else if (os.indexOf('Windows NT 5.0') >= 0)
		os = 'Windows 2000';
	else if (os.indexOf('Windows NT 6.0') >= 0)
		os = 'Windows Vista';
	else if (os.indexOf('Win95') >= 0)
		os = 'Win95';
	else if (os.indexOf('Win98') >= 0)
		os = 'Win98';
	else if (os.indexOf('Windows') >= 0)
		os = 'Windows';
	else if (os.indexOf('Linux') >= 0)
		os = 'Linux';
	else if (os.indexOf('Mac') >= 0)
		os = 'Mac';
	else
		os = 'Others';
	return os;
}
function Log_getBrowser()
{
	var userAgent = window.navigator.userAgent;
	
	if (userAgent.indexOf('Opera')>-1)
		return 'Opera';
	else if (userAgent.indexOf('Safari')>-1)
		return 'Safari';
	else if (userAgent.indexOf('Firefox')>-1)
		return userAgent.substr(userAgent.indexOf('Firefox'), 'Firefox/2'.length) + '.x';
	else if (userAgent.indexOf('MSIE')>-1)
		return userAgent.substr(userAgent.indexOf('MSIE')+2, 'ie 6'.length);
	else if (userAgent.indexOf('Gecko/')>-1)
		return 'Gecko';
	else
		return userAgent; //return "Others";
}
function Log_getHostFromURL(url)
{
	if (url)
	{
		url = url.toLowerCase();
		if (url.indexOf('http://')==0) url = url.substr(7);
		if (url.indexOf('www.')==0) url = url.substr(4);
		var index = url.indexOf('/');
		if (index>0) url = url.substr(0, index);
		return url;
	}
	else
		return '';
}
/*************************************************************************************/
function Log_createCookie(name, value, timeSpan) {
	var millisecond = timeSpanToMillisecond(timeSpan);
	var date = new Date();
	date.setTime(date.getTime() + millisecond);
	var expires = "; expires="+date.toGMTString();

	document.cookie = name+"="+value+expires+"; path=/";
}
function Log_updateCookie(name, value) {
	var cookieValue = document.cookie.split(';');
	cookieValue[0] = name + "=" + value;
	document.cookie = cookieValue.join(';');
}
function Log_readCookie(name) {
	var nameEQ = name + "=";
	var c, ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function Log_AssignBox(query)
{
	var url = 'http://reporting.kenh14.channelvn.net/Handler.ashx?' + query + '&dd=' + (new Date).getTime();
	var img = new Image(); img.src = url;
}

function Log_UtmSource(url,catId)
{

    var vars = [], hash;
   
    var hashes = window.location.href.slice(url.indexOf('?') + 1).split('&');
    if (url.indexOf('?') != -1)
    {
        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
       //Check la dong su lien
       if (vars["box"] != null && vars["catid"] != null)
       {
            //alert(vars["box"] + ":"+ vars["catid"]);
            var query = 'articleId=' + vars["box"] + '&articleTitle=' + vars["catid"]  +	'&catId=-1&catName=0&hostName=&urlRef=&browser=&os=&keyword=&isWebsiteVisit=true&isWebsiteNewVisitor=false&isArticleVisit=true&isCatVisit=true&website=k14_reporting&resolution=';
    		Log_sendXMLHttpRequestBox(query);
       }
       //Check tin doc nhieu nhat
       if (catId!=null && vars["box"]!=null)
       {
            //alert(vars["box"] + ":"+ catId);
            var query = 'articleId=' + vars["box"] + '&articleTitle=' + catId  +	'&catId=-1&catName=0&hostName=&urlRef=&browser=&os=&keyword=&isWebsiteVisit=true&isWebsiteNewVisitor=false&isArticleVisit=true&isCatVisit=true&website=k14_reporting&resolution=';
    		Log_sendXMLHttpRequestBox(query);
       }
    } 
}

function Log_sendXMLHttpRequestBox(query)
{
	var url = 'http://reporting.kenh14.channelvn.net/Handler.ashx?' + query + '&dd=' + (new Date).getTime();
	var img1 = new Image(); img1.src = url;
}
function Log_sendXMLHttpRequest(query)
{
	var url = 'http://reporting.kenh14.channelvn.net/Handler.ashx?' + query + '&dd=' + (new Date).getTime();
	//var url1 = 'http://reporting.channelvn.net/Handler.ashx?' + query + '&dd=' + (new Date).getTime();
	var img = new Image(); img.src = url;
	//var img1 = new Image(); img1.src = url1;
//	var script = document.createElement('script');
//    script.setAttribute('type','text/javascript');
//    script.setAttribute('src', url);
//    var head = document.getElementsByTagName('head')[0];
//    head.appendChild(script);
}

function Log_getkeyword()
{
	var keyword = '';
	var referrer = document.referrer ? document.referrer : '';
	var index = referrer.indexOf('?');
	if (index != -1)
	{	
		query = new Log_Querystring(referrer.substr(index + 1));
		var sr = Log_getParam(referrer);
		if (sr) keyword = query.get(sr, '');
	}
	if(!keyword) keyword = '';
	return keyword;
}
function Log_getParam(referrer)
{
	var _uOsr=new Array();
	var _uOkw=new Array();
	_uOsr[0]="google";	_uOkw[0]="q";
	_uOsr[1]="yahoo";	_uOkw[1]="p";
	_uOsr[2]="msn";		_uOkw[2]="q";
	_uOsr[3]="aol";		_uOkw[3]="query";
	_uOsr[4]="aol";		_uOkw[4]="encquery";
	_uOsr[5]="lycos";	_uOkw[5]="query";
	_uOsr[6]="ask";		_uOkw[6]="q";
	_uOsr[7]="altavista";	_uOkw[7]="q";
	_uOsr[8]="netscape";	_uOkw[8]="s";
	_uOsr[9]="cnn";	_uOkw[9]="query";
	_uOsr[10]="looksmart";	_uOkw[10]="qt";
	_uOsr[11]="about";	_uOkw[11]="terms";
	_uOsr[12]="mamma";	_uOkw[12]="query";
	_uOsr[13]="alltheweb";	_uOkw[13]="q";
	_uOsr[14]="gigablast";	_uOkw[14]="q";
	_uOsr[15]="voila";	_uOkw[15]="rdata";
	_uOsr[16]="virgilio";	_uOkw[16]="qs";
	_uOsr[17]="live";	_uOkw[17]="q";
	_uOsr[18]="baidu";	_uOkw[18]="wd";
	_uOsr[19]="alice";	_uOkw[19]="qs";
	_uOsr[20]="seznam";	_uOkw[20]="w";
	_uOsr[21]="yandex";	_uOkw[21]="text";
	_uOsr[22]="najdi";	_uOkw[22]="q";
	_uOsr[23]="aol";	_uOkw[23]="q";
	_uOsr[24]="club-internet"; _uOkw[24]="q";
	_uOsr[25]="mama";	_uOkw[25]="query";
	_uOsr[26]="seznam";	_uOkw[26]="q";
	_uOsr[27]="search";	_uOkw[27]="q";
	//_uOsr[28]="368cnbacth";	_uOkw[28]="a";
	for (var i=0; i<_uOsr.length;i++)
		if (referrer.toLowerCase().indexOf(_uOsr[i].toLowerCase()) > -1) return _uOkw[i];
	return null;
}
/*************************************************************************************/
function Log_callLogger()
{
	var cookieValue = null, cookieName = 'ChannelVN.Logger';
	
	var newsId = Log_ArticleId;
	var newsTitle = Log_ArticleName;
	
	var catId = Log_CatId;
	var catName = Log_CatName;
	var host = Log_getHostFromURL(location.href);
	var browser = Log_getBrowser();
	var resolution = screen.width + ' x ' + screen.height;
	var os = Log_getOS();
	
	var ref = Log_getHostFromURL(document.referrer);
	if (ref == host) ref = '';
	
	
	var keyword = '';
	if (ref != '') keyword = Log_getkeyword();
	
	var isArticleVisit = false, isCatVisit = false, isWebsiteVisit = false, isWebsiteNewVisitor = false;;
	
	
	
	// check is new visitor for website
	cookieValue = Log_readCookie(cookieName);
	if (cookieValue == null)
	{
		isWebsiteNewVisitor = true;
		isWebsiteVisit = true;
		Log_createCookie(cookieName, (new Date).getTime(), TimeSpan_isNewVisit);
	}
	else
	{	
		var d = new Date();
		if (d.getTime() - timeSpanToMillisecond(TimeSpan_isVisit) >= Number(cookieValue))
		{
			isWebsiteVisit = true;
		}
		Log_createCookie(cookieName, (new Date).getTime(), TimeSpan_Persistance);
	}
	
	// check is new visitor for article 
	//if (Number(newsId) != isNaN && Number(newsId) >= 0)
	if (newsId != null && newsId != '' && newsId != '-1')
	{
		cookieName = 'ChannelVN.Logger.p';
		cookieValue = Log_readCookie(cookieName);
		if (cookieValue == null)
		{
			cookieValue = newsId + '_' + (new Date).getTime();
			Log_createCookie(cookieName, cookieValue, TimeSpan_Persistance);
			isArticleVisit = true;
		}
		else
		{
			var tem = cookieValue.split(',');
			var i=0;
			for (i=0; i<tem.length; i++)
			{
				if (tem[i].indexOf(newsId + '_') == 0)
				{
					break;
				}
			}
			
			if (i == tem.length) // chua co newsid
			{
				cookieValue += ',' + newsId + '_' + (new Date).getTime();
				Log_createCookie(cookieName, cookieValue, TimeSpan_Persistance);
				isArticleVisit = true;
			}
			else // da co newsid
			{
				var d = new Date();
				var oldTime = Number(tem[i].split('_')[1]);
				if (d.getTime() - timeSpanToMillisecond(TimeSpan_isVisit) >= oldTime) // kiem tra xem expire chua
				{
					isArticleVisit = true;
				}
				tem[i] = newsId + '_' + (new Date).getTime();
				cookieValue = tem.join(',');
				Log_createCookie(cookieName, cookieValue, TimeSpan_Persistance);
			}
		}
	}
	
	// check is new visitor for category
	//if (Number(catId) != isNaN && Number(catId) >= 0)
	if (catId != null && catId != '' && catId != '-1')
	{
		cookieName = 'ChannelVN.Logger.c';
		cookieValue = Log_readCookie(cookieName);
		if (cookieValue == null)
		{
			cookieValue = catId + '_' + (new Date).getTime();
			Log_createCookie(cookieName, cookieValue, TimeSpan_Persistance);
			isCatVisit = true;
		}
		else
		{
			var tem = cookieValue.split(',');
			var i=0;
			for (i=0; i<tem.length; i++)
			{
				if (tem[i].indexOf(catId + '_') == 0)
				{
					break;
				}
			}
			
			if (i == tem.length)
			{
				cookieValue += ',' + catId + '_' + (new Date).getTime();
				Log_createCookie(cookieName, cookieValue, TimeSpan_Persistance);
				isCatVisit = true;
			}
			else
			{
				var d = new Date();
				var oldTime = Number(tem[i].split('_')[1]);
				if (d.getTime() - timeSpanToMillisecond(TimeSpan_isVisit) >= oldTime)
				{
					isCatVisit = true;
				}
				tem[i] = catId + '_' + (new Date).getTime();
				cookieValue = tem.join(',');
				Log_createCookie(cookieName, cookieValue, TimeSpan_Persistance);
			}
		}
	}
	
	// remove special characters
	newsTitle = newsTitle.replace(/\t/g, ' '); // thay TAB = SPACE
	
	catName = catName.replace(/\t/g, ' '); // thay TAB = SPACE
	
	
	query = 'articleId=' + newsId +
			'&articleTitle=' + encodeURIComponent(newsTitle?newsTitle:'') +
			'&catId=' + catId +
			'&catName=' + encodeURIComponent(catName?catName:'') +
			'&hostName=' + encodeURIComponent(host) +
			'&urlRef=' + encodeURIComponent(ref) +
			'&browser=' + encodeURIComponent(browser) +
			'&os=' + encodeURIComponent(os) +
			'&keyword=' + encodeURIComponent(keyword) +
			'&isWebsiteVisit=' + isWebsiteVisit +
			'&isWebsiteNewVisitor=' + isWebsiteNewVisitor +
			'&isArticleVisit=' + isArticleVisit +
			'&isCatVisit=' + isCatVisit +
			'&website=' + encodeURIComponent(log_website) +
			'&resolution=' + encodeURIComponent(resolution);
	Log_sendXMLHttpRequest(query);
}


function Log_callLogger_finish() {}
		
//window.addEventListener ? window.addEventListener('load', Log_callLogger, false) : window.attachEvent('onload', Log_callLogger);






function addJavascript(jsname) {
var th = document.getElementById("divloadScript");
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.setAttribute('src',jsname);
th.appendChild(s);
}



/*vietuni8.js - R.19.10.01 @JOTREQFA@P*Veni*Vidi*Vici*
* by Tran Anh Tuan [tuan@physik.hu-berlin.de] 
* Copyright (c) 2001, 2002 AVYS e.V.. All Rights Reserved.
*
* Originally published and documented at http://www.avys.de/
* You may use this code without fee on noncommercial web sites. 
* You may NOT alter the code and then call it another name and/or resell it.
* The copyright notice must remain intact on srcipts.
*/

// interface for HTML:
//

var supported = (document.all || document.getElementById);

var disabled = false;
var charmapid = 1;
var keymodeid = 0;
var linebreak = 0;
var theTyper = null;

reset = function(){}
telexingVietUC = initTyper;

function setTypingMode(mode) {
  keymodeid = mode;

  if (theTyper) theTyper.keymode= initKeys();
  if (!supported && !disabled) {
    alert("Xin loi, trinh duyet web cua ban khong cho phep dung VietTyping.\n");
    disabled = true;  
  }
}

var vumapsURI  = "http://www.avys.de/js/vumaps.js";
var vumaps = 0;
function setCharMap(mapID) {
  charmapid = mapID+1;
  if (!vumaps) loadModule(vumapsURI, "vumaps");
  if (theTyper) theTyper.charmap = initCharMap();
}

function autoConvert(txtarea, tomap) {
  if (!txtarea) return;
  var srcid = detectFormat(txtarea.value);
  if (!srcid) return;
  var srcmap = initCharMap(srcid);
  var destmap = initCharMap(tomap);
  txtarea.value=srcmap.convertTxtTo(txtarea.value,destmap);
}

function loadModule(mURI,idstr) {
  if (!document.all) return alert("Sorry, only IE4,5,6 support this feature.");
  var ls="&nbsp;<script defer type='text/javascript' src='"+mURI+"'></script>";
  document.body.insertAdjacentHTML('beforeEnd', ls);
  if (!eval(idstr)) alert( errormsg);
}
var errormsg="Module chu+a na.p xong, co' the^? ke^'t no^'i cha^.m...\n"+
"Ba.n ha~y thu+.c hie^.n thao ta'c mo^.t la^`n nu+~a!";
 
function convertAtOnce(txtarea) {
  if(!txtarea) return;
  if(theTyper.keymode.off) {
    var msg = "Bo^. go~ ddang o+? tra.ng tha'i ta('t.\n Ba.n pha?i ddu+a ve^` "+
    "kie^?u dda~ du`ng dde^? vie^'t ba`i truo+'c khi soa't da^'u";
    return alert(msg);      
  }
  if(!theTyper) theTyper = new CVietString("");
  txtarea.value = theTyper.doConvertIt(txtarea.value);
}

initCharMap = function() { return new CVietUniCodeMap(); }

initKeys = function() {
  switch (keymodeid) {
    case 1: return new CTelexKeys();
    case 2: return new CVniKeys();
    case 3: return new CViqrKeys();
    default: return new CVKOff();
  }
}

function initTyper(txtarea) {
  txtarea.vietarea= true;
  txtarea.onkeyup= null;
  if (!supported) return;
  txtarea.onkeypress= vietTyping;
  txtarea.getCurrentWord= getCurrentWord;
  txtarea.replaceWord= replaceWord;
  txtarea.onkeydown= onKeyDown;
  txtarea.onmousedown= onMouseDown;
}

function getEvt(evt) {
  return document.all? event.keyCode: (evt && evt.which)? evt.which: 0;
}

function onKeyDown(evt) {
  var c= getEvt(evt);
  if ((c==10) || (c==13)) { reset(1); linebreak= 1; }
  else if ((c<49) && (c!=16) && (c!=20)) { linebreak= 0; reset(c==32); }
  return true;
}

function onMouseDown(evt) { reset(0); linebreak= 0; return true; }

function vietTyping(evt) {
  var c= getEvt(evt);
  if(theTyper) theTyper.value= this.getCurrentWord();
  else theTyper= new CVietString(this.getCurrentWord());
  var changed= (c>32) && theTyper.typing(c);
  if (changed) this.replaceWord(theTyper.value);
  return !changed; 
}

function getCurrentWord() {
  if(!document.all) return this.value;
  var caret = this.document.selection.createRange();
  var backward = -17;
  do {
    var caret2 = caret.duplicate();
    caret2.moveStart("character", backward++);
  } while (caret2.parentElement() != this && backward <0);
  this.curword = caret2.duplicate();
  return caret2.text;
}

function replaceWord(newword) {
  if(!document.all) { this.value= newword; return; }
  this.curword.text = newword;
  this.curword.collapse(false);
}
// end interface


// "class": CVietString
//
function CVietString(str) {
  this.value= str;
  this.keymode= initKeys();
  this.charmap= initCharMap();
  this.ctrlchar= '-';
  this.changed= 0;

  this.typing= typing;
  this.Compose= Compose;
  this.doConvertIt= doConvertIt;
  this.findCharToChange= findCharToChange;
  return this;
}

function typing(ctrl) {
  this.changed = 0;
  this.ctrlchar = String.fromCharCode(ctrl);
  if (linebreak) linebreak= 0; else this.keymode.getAction(this);
  return this.changed;
}

function doConvertIt (txt) {
  var i = 1, len = txt.length;
  this.value = txt.charAt(0);
  while (i < len) {
    this.ctrlchar = txt.charAt(i++);
    this.changed = 0;
    this.keymode.getAction(this);
    if (!this.changed) this.value+= this.ctrlchar;
  }
  return this.value;
}

function Compose(type) {
  var info = this.findCharToChange(type);
  if (!info) return;
  var telex;
  if (info[0]=='\\') telex= [1,this.ctrlchar,1];
  else if (type>6) telex= this.charmap.getAEOWD(info[0], type, info[3]);
  else telex= this.charmap.getDau(info[0], type);
  if (!(this.changed = telex[0])) return;
  this.value = this.value.replaceAt(info[1],telex[1],info[2]);
  if (!telex[2]) { spellerror= 1; this.value+= this.ctrlchar; }
}

function findCharToChange(type) {
  var lastchars= this.charmap.lastCharsOf(this.value, 5);
  var i= 0, c=lastchars[0][0], chr=0;
  if (c=='\\') return [c,this.value.length-1,1];
  if (type==15) while (!(chr=this.charmap.isVD(c))) {
    if ((c < 'A') || (i>=4) || !(c=lastchars[++i][0])) return null;
  }
  else while( "cghmnptCGHMNPT".indexOf(c)>=0) {
    if ((c < 'A') || (i>=2) || !(c=lastchars[++i][0])) return null;
  }
  c = lastchars[0][0].toLowerCase();
  var pc = lastchars[1][0].toLowerCase();
  var ppc = lastchars[2][0].toLowerCase();
  if (i==2 && type<6) {
    var tmp = pc + c;
    if ((tmp!="ng") && (tmp!="ch") && (tmp!="nh")) return null;
    if (tmp=="ch" && type!=1 && type!=3) return null; 
  }
  else if (i==1 && type<6) {
    if((c=='g') || (c=="h")) return null;
    if ("cpt".indexOf(c) >=0 && type!=1 && type!=3) return null; 
  }
  else if (i==0 && type!=15) {
    if ( (chr=this.charmap.isVowel(lastchars[1][0]))
      && ("uyoia".indexOf(c)>=0) && !this.charmap.isUO(pc,c)
      && !((pc=='o' && c=='a') || (pc=='u' && c=='y'))
      && !((ppc=='q' && pc=='u') || (ppc=='g' && pc=='i')) ) ++i;
    if (c=='a' && (type==9 || type==7)) i= 0;
  }
  c= lastchars[i][0];
  if ((i==0 || chr==0) && type!=15) chr= this.charmap.isVowel(c);
  if (!chr) return null;
  var clen= lastchars[i][1], isuo=0;
  if ((i>0) && (type==7 || type==8 || type==11)) {
    isuo=this.charmap.isUO(lastchars[i+1][0],c);
    if (isuo) { chr=isuo; clen+=lastchars[++i][1]; isuo=1; }
  }
  var pos= this.value.length;
  for (var j=0; j<= i; j++) pos -= lastchars[j][1];
  return [chr, pos, clen, isuo];
}
// end CVietString

// character-map template
//
function CVietCharMap() {
this.vietchars = null;
this.length = 149;
return this; 
}

CVietCharMap.prototype.charAt = function(ind) { 
  var chrcode = this.vietchars[ind];
  return chrcode ? String.fromCharCode(chrcode) : null; 
}

CVietCharMap.prototype.isVowel = function(chr) {
  var ind = this.length-5;
  while ((chr != this.charAt(ind)) && ind) --ind;
  return ind;
}

CVietCharMap.prototype.isVD = function (chr) {
  var ind = this.length-5;
  while ((chr != this.charAt(ind)) && (ind < this.length)) ++ind;
  return (ind<this.length)? ind: 0;
}
                         
CVietCharMap.prototype.isCol = function (col, chr){
  var i=12, ind=col+1;
  while (i>=0 && (this.charAt(i*12+ind)!=chr)) --i; 
  return (i>=0)? i*12+ind : 0;
}

CVietCharMap.prototype.isUO = function (c1, c2) {
  if (!c1 || !c2) return 0;
  var ind1= this.isCol(9, c1);
  if (!ind1) ind1= this.isCol(10, c1);
  if (!ind1) return 0;
  var ind2= this.isCol(6, c2);
  if (!ind2) ind2= this.isCol(7, c2);
  if (!ind2) ind2= this.isCol(8, c2);
  if (!ind2) return 0;
  return [ind1,ind2];
}

CVietCharMap.prototype.getDau = function (ind, type) {
  var accented= (ind < 25)? 0: 1;
  var ind_i= (ind-1) % 24 +1;
  var charset= (type == 6)? 0 : type;                 
  if ((type== 6) && !accented) return [0];
  var newind= charset*24 + ind_i;
  if (newind == ind) newind= ind_i;
  var chr= this.charAt(newind);
  if (!chr) chr= this.lowerCaseOf(0,newind);
  return [1, chr, newind>24 || type==6];
}

var map=[
[7,7,7,8,8, 8,9,10,11,15],
[0,3,6,0,6, 9,0, 3, 6, 0],
[1,4,7,2,8,10,1, 4, 7, 1]
];
CVietCharMap.prototype.getAEOWD = function (ind, type, isuo) {
  var c=0, i1=isuo? ind[0]: ind;
  var vc1= (type==15)? (i1-1)%2 : (i1-1)%12;
  if (isuo) {
    base= ind[1]-(ind[1]-1)%12;
    if (type==7 || type==11) c= this.charAt(i1-vc1+9)+this.charAt(base+7);
    else if (type==8) c= this.charAt(i1-vc1+10)+this.charAt(base+8);
    return [c!=0, c, 1];
  }
  var i= -1, shift= 0, del= 0;
  while (shift==0 && ++i<map[0].length) {
    if (map[0][i]==type) {
      if(map[1][i]==vc1) shift= map[2][i]-vc1;
      else if(map[2][i]==vc1) shift= map[1][i]-vc1;
    }
  }
  if (shift==0) {
    if (type==7 && (vc1==2 || vc1==8)) shift=-1;
    else if ((type==9 && vc1==2) || (type==11 && vc1==8)) shift=-1;
    else if (type==8 && (vc1==1 || vc1==7)) shift=1;
    del= 1;
  } else del=(shift>0);
  var chr= this.charAt(i1+shift);
  if (!chr) chr= this.lowerCaseOf(0,i1+shift);
  return [shift!=0, chr, del];
}

CVietCharMap.prototype.lastCharsOf = function (str, num) {
  if (!num) return [str.charAt(str.length-1),1];
  var vchars = new Array(num);
  for (var i=0; i< num; i++) vchars[i]= [str.charAt(str.length-i-1),1];
  return vchars;
}
// end CVietCharMap prototype


String.prototype.replaceAt= function(i,newchr,clen) {
  return this.substring(0,i)+ newchr + this.substring(i+clen);
}

// output map: class CVietUniCodeMap
// 
function CVietUniCodeMap(){ var map = new CVietCharMap();
map.vietchars = new Array(
"UNICODE",
97, 226, 259, 101, 234, 105, 111, 244, 417, 117, 432, 121,
65, 194, 258, 69, 202, 73, 79, 212, 416, 85, 431, 89,
225, 7845, 7855, 233, 7871, 237, 243, 7889, 7899, 250, 7913, 253,
193, 7844, 7854, 201, 7870, 205, 211, 7888, 7898, 218, 7912, 221,
224, 7847, 7857, 232, 7873, 236, 242, 7891, 7901, 249, 7915, 7923,
192, 7846, 7856, 200, 7872, 204, 210, 7890, 7900, 217, 7914, 7922,
7841, 7853, 7863, 7865, 7879, 7883, 7885, 7897, 7907, 7909, 7921, 7925,
7840, 7852, 7862, 7864, 7878, 7882, 7884, 7896, 7906, 7908, 7920, 7924,
7843, 7849, 7859, 7867, 7875, 7881, 7887, 7893, 7903, 7911, 7917, 7927,
7842, 7848, 7858, 7866, 7874, 7880, 7886, 7892, 7902, 7910, 7916, 7926,
227, 7851, 7861, 7869, 7877, 297, 245, 7895, 7905, 361, 7919, 7929,
195, 7850, 7860, 7868, 7876, 296, 213, 7894, 7904, 360, 7918, 7928,
100, 273, 68, 272);
return map;
}

// input methods: class C...Keys
function CVietKeys() {
  this.getAction= function(typer) { 
    var i= this.keys.indexOf(typer.ctrlchar.toLowerCase());
    if(i>=0) typer.Compose(this.actions[i]);
  }
  return this;
}

function CVKOff() {
  this.off = true;
  this.getAction= function(){};
  return this;
}

function CTelexKeys() {
  var k= new CVietKeys();
  k.keys= "sfjrxzaeowd";
  k.actions= [1,2,3,4,5,6,9,10,11,8,15];
  k.istelex= true;
  return k;
}
             
function CVniKeys() {
  var k= new CVietKeys();
  k.keys= "0123456789";
  k.actions= [6,1,2,4,5,3,7,8,8,15];
  return k;
} 

function CViqrKeys() {
  var k= new CVietKeys();
  k.keys= "\xB4/'`.?~-^(*+d";
  k.actions= [1,1,1,2,3,4,5,6,7,8,8,8,15];
  return k;
}

// end vietuni.js



function CreateFlashBanner(FlashFile,Width,Height,codename)
{	
	var s11 = new SWFObject(FlashFile,"mediaplayer",Width,Height,"7",false);
	s11.addParam("wmode", "transparent") ;
	s11.write(codename);
}

function CreateImageBanner(ctr,ImgLink,Ulr,Width,Height,codename)
{
    var div = document.createElement("DIV");
    div.style.paddingBottom = "5px" ;
	div.id = "div_" + codename;
	ImgLink = HostingFile+ ImgLink;
	div.innerHTML = "<a href='"+Ulr+"' target='_blank'><img src='"+ImgLink+"' width='"+Width+"px' style='border:0px' /></a>"
	ctr.appendChild(div);
}

function Changepic(ctr,link)
{
    ctr.src= link;
}
function Backpic(ctr,link)
{
    ctr.src=link;
}
function get_radio_value (radio_array)
{
  var i;
  for (i = 0; i < radio_array.length; i++)
   if (radio_array[i].checked)
    return radio_array[i].value;
  return null;
}

function Guipoll_yesno(yesno)
{
    //if(!require_txt('txtReason',"Bạn chưa nhập lý do")) return false;
 
    var reason = document.getElementById('txtReason').value;
   
    if(reason==null||reason== ""){alert("Bạn chưa đóng góp ý kiến mà!"); return false;}
    var yes = yesno   ;
   
    var age = get_radio_value(document.getElementsByName('rdage'));
   
    var location = get_radio_value(document.getElementsByName('rdVung'));
   
    var gender = get_radio_value(document.getElementsByName('rdGen'));
  
    
        var queryString = "yesno="+encodeURIComponent(yes)+"&gender="+encodeURIComponent(gender)+"&age="+encodeURIComponent(age)+"&location="+encodeURIComponent(location)+"&reason="+encodeURIComponent(reason);
        var img = new Image();
        img.src = "/Pool_k14.aspx?"+queryString;
        //window.open('http://localhost:8100/popup.html','','width=342,height=206,location=no,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,toolbar=no');
       alert("Cảm ơn bạn đã đóng góp cho Kênh14!")
        //document.getElementById('box_Quatang').innerHTML = "<img src='"+hostUrl+"/Images/BoxQuaTang/ThongBaodaGuiDI.jpg' />";
        var cookieName = "BinhChonGiaoDienK14";
        createCookie(cookieName,cookieName,1);
    
    
  
   hideeditform();
   document.getElementById('divMaNhung').innerHTML = tempmanhung;
    
}
var tempmanhung="";

function ShowYesPanel()
{
    var cookieName = "BinhChonGiaoDienK14";
    if(readCookie(cookieName)==null)
    {
        tempmanhung = document.getElementById('divMaNhung').innerHTML;
        document.getElementById('divMaNhung').className= 'divMaNhung1';
        document.getElementById('divMaNhung').innerHTML = writeJSYes();
        showPopup('divMaNhung');
        document.getElementById("bgFilter").style.display = 'block';
	    document.getElementById("bgFilter").style.zIndex = '5';
        document.getElementById("bgFilter").style.height = document.getElementById('mainDivKenh14').offsetHeight + 'px';
    }
    else
    {
        alert("Bạn đã đóng góp ý kiến một lần rồi!");
    }
}

function ShowNoPanel()
{
    var cookieName = "BinhChonGiaoDienK14";
    if(readCookie(cookieName)==null)
    {
        tempmanhung = document.getElementById('divMaNhung').innerHTML;
        document.getElementById('divMaNhung').className= 'divMaNhung1';
        document.getElementById('divMaNhung').innerHTML = writeJSNo();
        showPopup('divMaNhung');
        document.getElementById("bgFilter").style.display = 'block';
	    document.getElementById("bgFilter").style.zIndex = '5';
        document.getElementById("bgFilter").style.height = document.getElementById('mainDivKenh14').offsetHeight + 'px';
    }
    else
    {
        alert("Bạn đã đóng góp ý kiến một lần rồi!");
    }
    
    
}

function hideeditform()
{
    document.getElementById('divMaNhung').className="";
	document.getElementById('divMaNhung').style.display = 'none';
	document.getElementById("bgFilter").style.display = 'none';
	
	
}
function writeJSYes(){
var str='';
str+='<div style="overflow:hidden;width:600px;font-family:Arial">';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupyes_01.jpg) no-repeat;width:600px;height:102px"> <div style="float:right;cursor:pointer;" onclick="hideeditform()"><img src="/ImagesGUI/Portal/Misc/xxx.gif" \/><\/div><\/div>';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupyes_02.jpg) no-repeat;width:600px;height:104px">';
str+='                <div style="padding:0px 15px">';
str+='                    <div style="color:#333;font-size:12px;padding-left:40px;">';
str+='                        <input id="rTV" type="radio" checked="CHECKED" title="Telex" onfocus="setTypingMode(1);"name="TV" \/>Telex  ';
str+='                        <input id="Radio2" type="radio" title="VNI" onfocus="setTypingMode(2);" name="TV" \/>VNI ';
str+='                        <input id="Radio1" type="radio" title="Name" onfocus="setTypingMode(0);" name="TV" \/>None';
str+='                    <\/div>';
str+='                    <div style="padding-left:10px;">';
str+='                        <textarea id="txtReason"  onkeyup="telexingVietUC(this,event);"';
str+='                                        style="width: 530px; height: 80px; font-family: Arial; font-size: 12px;border:solid 1px #c36e1d" ><\/textarea> *';
str+='                    <\/div>';
str+='                <\/div>';
str+='            <\/div>';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupyes_03.jpg) no-repeat;width:600px;height:39px">';
str+='                <div style="font-size:18px;color:#fff;font-weight:bold;padding:5px 25px;">';
str+='                    Bi giờ vui lòng cho Kênh14 biết thông tin về bạn nhé !!';
str+='                <\/div>';
str+='            <\/div>';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupyes_04.jpg) no-repeat;width:600px;height:95px;color:#fff;">';
str+='                <div style="padding-left:20px;font-size:13px;"><span style="font-size:17px;">*Tuổi của bạn: <\/span>';
str+='                        <b><input name="rdage" type="radio" value="duoi15" checked="CHECKED"  \/>Dưới 15';
str+='                        <input name="rdage" type="radio" value="15_18"  \/>15-18       ';
str+='                        <input name="rdage" type="radio" value="19_22"  \/>19-22        ';
str+='                        <input name="rdage" type="radio" value="23_25"  \/>23-25            ';
str+='                        <input name="rdage" type="radio" value="tren25"  \/>Trên 25<\/b>';
str+='                <\/div>';
str+='                <div style="padding-left:20px;font-size:13px;"><span style="font-size:17px;padding-right:25px;">*Nơi bạn ở:<\/span>';
str+='                     <b><input name="rdVung" type="radio" value="HN" checked="CHECKED"  \/>Hà Nội  ';
str+='                        <input name="rdVung" type="radio" value="SG"   \/>Sài Gòn  ';
str+='                        <input name="rdVung" type="radio" value="MB"  \/>Miền Bắc  ';
str+='                        <input name="rdVung" type="radio" value="MT"  \/>Miền Trung  ';
str+='                        <input name="rdVung" type="radio" value="MN"  \/>Miền Nam<\/b>';
str+='                <\/div>';
str+='                <div style="padding-left:20px;font-size:13px;"><span style="font-size:17px;padding-right:35px;">*Giới tính:<\/span>';
str+='                    <b><input name="rdGen" type="radio" value="true" checked="CHECKED"  \/>Nam     ';
str+='                        <input name="rdGen" type="radio" value="false"   \/>Nữ';
str+='                        <\/b>';
str+='                <\/div>';
str+='            <\/div>';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupyes_05.jpg) no-repeat;width:600px;height:60px;color:#fff;" align="center">';
str+='                <img style="cursor:pointer" src="\/ImagesGUI\/Portal\/MISC\/gui_poll.gif" onclick="Guipoll_yesno(\'true\');" \/>';
str+='            <\/div>';
str+='        <\/div>';
return str;
}



function writeJSNo(){
var str='';
str+='<div style="overflow:hidden;width:600px;font-family:Arial">';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupno_01.jpg) no-repeat;width:600px;height:102px"> <div style="float:right;cursor:pointer;" onclick="hideeditform()"><img src="/ImagesGUI/Portal/Misc/xxx.gif" \/><\/div><\/div>';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupno_02.jpg) no-repeat;width:600px;height:104px">';
str+='                <div style="padding:0px 15px">';
str+='                    <div style="color:#333;font-size:12px;padding-left:40px;">';
str+='                        <input id="rTV" type="radio" checked="CHECKED" title="Telex" onfocus="setTypingMode(1);"name="TV" \/>Telex  ';
str+='                        <input id="Radio2" type="radio" title="VNI" onfocus="setTypingMode(2);" name="TV" \/>VNI ';
str+='                        <input id="Radio1" type="radio" title="Name" onfocus="setTypingMode(0);" name="TV" \/>None';
str+='                    <\/div>';
str+='                    <div style="padding-left:10px;">';
str+='                        <textarea id="txtReason"  onkeyup="telexingVietUC(this,event);"';
str+='                                        style="width: 530px; height: 80px; font-family: Arial; font-size: 12px;border:solid 1px #c36e1d" ><\/textarea> *';
str+='                    <\/div>';
str+='                <\/div>';
str+='            <\/div>';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupno_03.jpg) no-repeat;width:600px;height:39px">';
str+='                <div style="font-size:18px;color:#fff;font-weight:bold;padding:5px 25px;">';
str+='                    Bi giờ vui lòng cho Kênh14 biết thông tin về bạn nhé !!';
str+='                <\/div>';
str+='            <\/div>';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupno_04.jpg) no-repeat;width:600px;height:95px;color:#fff;">';
str+='                <div style="padding-left:20px;font-size:13px;"><span style="font-size:17px;">*Tuổi của bạn: <\/span>';
str+='                        <b><input name="rdage" type="radio" value="duoi15" checked="CHECKED"  \/>Dưới 15';
str+='                        <input name="rdage" type="radio" value="15_18"  \/>15-18       ';
str+='                        <input name="rdage" type="radio" value="19_22"  \/>19-22        ';
str+='                        <input name="rdage" type="radio" value="23_25"  \/>23-25            ';
str+='                        <input name="rdage" type="radio" value="tren25"  \/>Trên 25<\/b>';
str+='                <\/div>';
str+='                <div style="padding-left:20px;font-size:13px;"><span style="font-size:17px;padding-right:25px;">*Nơi bạn ở:<\/span>';
str+='                     <b><input name="rdVung" type="radio" value="HN" checked="CHECKED"  \/>Hà Nội  ';
str+='                        <input name="rdVung" type="radio" value="SG"   \/>Sài Gòn  ';
str+='                        <input name="rdVung" type="radio" value="MB"  \/>Miền Bắc  ';
str+='                        <input name="rdVung" type="radio" value="MT"  \/>Miền Trung  ';
str+='                        <input name="rdVung" type="radio" value="MN"  \/>Miền Nam<\/b>';
str+='                <\/div>';
str+='                <div style="padding-left:20px;font-size:13px;"><span style="font-size:17px;padding-right:35px;">*Giới tính:<\/span>';
str+='                    <b><input name="rdGen" type="radio" value="true" checked="CHECKED"  \/>Nam     ';
str+='                        <input name="rdGen" type="radio" value="false"   \/>Nữ';
str+='                        <\/b>';
str+='                <\/div>';
str+='            <\/div>';
str+='            <div style="background:url(\/ImagesGUI\/Portal\/MISC\/popupno_05.jpg) no-repeat;width:600px;height:60px;color:#fff;" align="center">';
str+='                <img style="cursor:pointer" src="\/ImagesGUI\/Portal\/MISC\/gui_poll.gif" onclick="Guipoll_yesno(\'false\');" \/>';
str+='            <\/div>';
str+='        <\/div>';
return str;
}

function writeJSHome(){
var str='';
str+='<div style="float:left;width:242px"><img src="\/ImagesGUI\/Portal\/MISC\/banner-cokhong.gif" \/><\/div>';
str+='            <div style="float:left;width:96px;background-color:#7ab328;height:70px;">';
str+='                <div style="padding:3px"><img style="cursor:pointer;" src="\/ImagesGUI\/Portal\/MISC\/home_yes.gif" onmouseover="Changepic(this,\'\/ImagesGUI\/portal\/MISC\/home_yes_over.gif\')" onmouseout="Backpic(this,\'\/ImagesGUI\/portal\/MISC\/home_yes.gif\')" onclick="ShowYesPanel();"   \/><\/div>';
str+='                <div style="padding:0px 3px"><img style="cursor:pointer;" src="\/ImagesGUI\/Portal\/MISC\/home_no.gif" onmouseover="Changepic(this,\'\/ImagesGUI\/portal\/MISC\/home_no_over.gif\')" onmouseout="Backpic(this,\'\/ImagesGUI\/portal\/MISC\/home_no.gif\')" onclick="ShowNoPanel();"   \/><\/div>';
str+='            <\/div>';
document.getElementById('box_poll_home_k14').innerHTML = str;
}




function showPopup(controlID)
{
	var control = document.getElementById(controlID);
	if (control)
	{
		control.style.display = 'block';
		control.style.zIndex = '100';
		var top = (window.screen.availHeight - control.offsetHeight)/2 - 100;
        var left = (document.documentElement.offsetWidth - control.offsetWidth)/2;
        left += (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft;
        top += (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;

		control.style.left= left + 'px';
		control.style.top=  top + 'px';
		
		return true;
	}
	return false;
}


function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}


var TimeSpan_isVisit = new Array(0, 0, 30); // 0 ngay, 0 gio, 30 phut
var TimeSpan_isUnique = new Array(1, 0, 0); // 1 ngay, 0 gio, 0 phut
var TimeSpan_isNewVisit = new Array(60, 0, 0); // 365 ngay, 0 gio, 0 phut
var TimeSpan_Persistance = new Array(365, 0, 0); // mai mai...
var Log_ArticleId, Log_ArticleName, Log_CatId, Log_CatName, Log_WebsiteID;
var isLite = false;

//Call this function
//articleId: int; articleTitle: string; catID: int; catName: string; WebsiteID: int; Lite: bool
function Log_AssignValue_v2(articleId, articleTitle, catId, catName, WebsiteID, Lite)
{
	Log_ArticleId = articleId;
	Log_ArticleName = articleTitle;
	Log_CatId = catId;
	Log_CatName = catName;
	Log_WebsiteID = WebsiteID;
	isLite = Lite;
	//for testing purpose
	//Log_callLogger_v2();
}

//Do not edit from this point
function timeSpanToMillisecond_v2(timeSpan)
{
	return ((timeSpan[0]*24 + timeSpan[1])*60 + timeSpan[2])*60000;
}
/*************************************************************************************/
function Log_Querystring_v2(qs) { // optionally pass a querystring to parse
	this.params = {};
	
	if (qs == null) qs = location.search.substring(1, location.search.length);
	if (qs.length == 0) return;

	qs = qs.replace(/\+/g, ' ');
	var args = qs.split('&');
	
	for (var i = 0; i < args.length; i++) {
		var pair = args[i].split('=');
		var name = decodeURIComponent(pair[0]);
		
		var value = (pair.length==2)
			? decodeURIComponent(pair[1])
			: name;
		
		this.params[name] = value;
	}
}

Log_Querystring_v2.prototype.get = function(key, default_) {
	var value = this.params[key];
	return (value != null) ? value : default_;
}

Log_Querystring_v2.prototype.contains = function(key) {
	var value = this.params[key];
	return (value != null);
}
function Log_getOS_v2()
{
	var os = window.navigator.userAgent;
	
	if (os.indexOf('Windows NT 5.1') >= 0)
		os = 'Windows XP';
	else if (os.indexOf('Windows NT 5.2') >= 0)
		os = 'Windows Server 2003';
	else if (os.indexOf('Windows NT 5.0') >= 0)
		os = 'Windows 2000';
	else if (os.indexOf('Windows NT 6.0') >= 0)
		os = 'Windows Vista';
	else if (os.indexOf('Win95') >= 0)
		os = 'Win95';
	else if (os.indexOf('Win98') >= 0)
		os = 'Win98';
	else if (os.indexOf('Windows') >= 0)
		os = 'Windows';
	else if (os.indexOf('Linux') >= 0)
		os = 'Linux';
	else if (os.indexOf('Mac') >= 0)
		os = 'Mac';
	else
		os = 'Others';
	return os;
}
function Log_getBrowser_v2()
{
	var userAgent = window.navigator.userAgent;
	if (userAgent.indexOf('Opera')>-1)
		return 'Opera';
	else if (userAgent.indexOf('Safari')>-1)
		return 'Safari';
	else if (userAgent.indexOf('Firefox')>-1)
		return userAgent.substr(userAgent.indexOf('Firefox'), 'Firefox/2'.length) + '.x';
	else if (userAgent.indexOf('MSIE')>-1)
		return userAgent.substr(userAgent.indexOf('MSIE')+2, 'ie 6'.length);
	else if (userAgent.indexOf('Gecko/')>-1)
		return 'Gecko';
	else
		return userAgent; //return "Others";
}


function Log_getHostFromURL_v2(url)
{
	if (url)
	{
		url = url.toLowerCase();
		if (url.indexOf('http://')==0) url = url.substr(7);
		if (url.indexOf('www.')==0) url = url.substr(4);
		var index = url.indexOf('/');
		if (index>0) url = url.substr(0, index);
		return url;
	}
	else
		return '';
}
/*************************************************************************************/
function Log_createCookie_v2(name, value, timeSpan) {
	var millisecond = timeSpanToMillisecond_v2(timeSpan);
	var date = new Date();
	date.setTime(date.getTime() + millisecond);
	var expires = "; expires="+date.toGMTString();

	document.cookie = name+"="+value+expires+"; path=/";
}
function Log_updateCookie_v2(name, value) {
	var cookieValue = document.cookie.split(';');
	cookieValue[0] = name + "=" + value;
	document.cookie = cookieValue.join(';');
}
function Log_readCookie_v2(name) {
	var nameEQ = name + "=";
	var c, ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function Log_sendXMLHttpRequest_v2(query)
{
	//var url = 'http://123.30.53.60:8088/Handler.ashx?' + query + '&dd=' + (new Date).getTime();
	//var url = 'http://localhost:3699/Handler.ashx?' + query + '&dd=' + (new Date).getTime();
	//var img = new Image(); img.src = url;
//	var script = document.createElement('script');
//    script.setAttribute('type','text/javascript');
//    script.setAttribute('src', url);
//    var head = document.getElementsByTagName('head')[0];
//    head.appendChild(script);
}

function Log_getkeyword_v2()
{
	var keyword = '';
	var referrer = document.referrer;
	var index = referrer.indexOf('?');
	if (index != -1)
	{	
		query = new Log_Querystring_v2(referrer.substr(index + 1));
		var sr = Log_getParam_v2(referrer);
		if (sr) keyword = query.get(sr, '');
	}
	if(!keyword) keyword = '';
	return keyword;
}
function Log_getParam_v2(referrer)
{
	var _uOsr=new Array();
	var _uOkw=new Array();
	_uOsr[0]="google";	_uOkw[0]="q";
	_uOsr[1]="yahoo";	_uOkw[1]="p";
	_uOsr[2]="msn";		_uOkw[2]="q";
	_uOsr[3]="aol";		_uOkw[3]="query";
	_uOsr[4]="aol";		_uOkw[4]="encquery";
	_uOsr[5]="lycos";	_uOkw[5]="query";
	_uOsr[6]="ask";		_uOkw[6]="q";
	_uOsr[7]="altavista";	_uOkw[7]="q";
	_uOsr[8]="netscape";	_uOkw[8]="s";
	_uOsr[9]="cnn";	_uOkw[9]="query";
	_uOsr[10]="looksmart";	_uOkw[10]="qt";
	_uOsr[11]="about";	_uOkw[11]="terms";
	_uOsr[12]="mamma";	_uOkw[12]="query";
	_uOsr[13]="alltheweb";	_uOkw[13]="q";
	_uOsr[14]="gigablast";	_uOkw[14]="q";
	_uOsr[15]="voila";	_uOkw[15]="rdata";
	_uOsr[16]="virgilio";	_uOkw[16]="qs";
	_uOsr[17]="live";	_uOkw[17]="q";
	_uOsr[18]="baidu";	_uOkw[18]="wd";
	_uOsr[19]="alice";	_uOkw[19]="qs";
	_uOsr[20]="seznam";	_uOkw[20]="w";
	_uOsr[21]="yandex";	_uOkw[21]="text";
	_uOsr[22]="najdi";	_uOkw[22]="q";
	_uOsr[23]="aol";	_uOkw[23]="q";
	_uOsr[24]="club-internet"; _uOkw[24]="q";
	_uOsr[25]="mama";	_uOkw[25]="query";
	_uOsr[26]="seznam";	_uOkw[26]="q";
	_uOsr[27]="search";	_uOkw[27]="q";
	//_uOsr[28]="368cnbacth";	_uOkw[28]="a";
	for (var i=0; i<_uOsr.length;i++)
		if (referrer.toLowerCase().indexOf(_uOsr[i].toLowerCase()) > -1) return _uOkw[i];
	return null;
}

/*************************************************************************************/
function Log_callLogger_v2()
{
	var cookieValue = null, cookieName = 'ChannelVN.Logger';
	
	var newsId = Log_ArticleId;
	var newsTitle = Log_ArticleName;
	
	var catId = Log_CatId;
	var catName = Log_CatName;
	var host = Log_getHostFromURL_v2(location.href);
	var browser = Log_getBrowser_v2();
	var resolution = screen.width + ' x ' + screen.height;
	var os = Log_getOS_v2();
	var log_website = "http://123.30.53.60:8088";
	
	var ref = Log_getHostFromURL_v2(document.referrer);
	if (ref == host) ref = '';
	
	
	var keyword = '';
	if (ref != '') keyword = Log_getkeyword();
	
	var isArticleVisit = false, isCatVisit = false, isWebsiteVisit = false, isWebsiteNewVisitor = false;;
	
	
	
	// check is new visitor for website
	cookieValue = Log_readCookie_v2(cookieName);
	if (cookieValue == null)
	{
		isWebsiteNewVisitor = true;
		isWebsiteVisit = true;
		Log_createCookie_v2(cookieName, (new Date).getTime(), TimeSpan_isNewVisit);
	}
	else
	{	
		var d = new Date();
		if (d.getTime() - timeSpanToMillisecond_v2(TimeSpan_isVisit) >= Number(cookieValue))
		{
			isWebsiteVisit = true;
		}
		Log_createCookie_v2(cookieName, (new Date).getTime(), TimeSpan_Persistance);
	}
	
	// check is new visitor for article 
	//if (Number(newsId) != isNaN && Number(newsId) >= 0)
	if (newsId != null && newsId != '' && newsId != '-1')
	{
		cookieName = 'ChannelVN.Logger.p';
		cookieValue = Log_readCookie_v2(cookieName);
		if (cookieValue == null)
		{
			cookieValue = newsId + '_' + (new Date).getTime();
			Log_createCookie_v2(cookieName, cookieValue, TimeSpan_Persistance);
			isArticleVisit = true;
		}
		else
		{
			var tem = cookieValue.split(',');
			var i=0;
			for (i=0; i<tem.length; i++)
			{
				if (tem[i].indexOf(newsId + '_') == 0)
				{
					break;
				}
			}
			
			if (i == tem.length) // chua co newsid
			{
				cookieValue += ',' + newsId + '_' + (new Date).getTime();
				Log_createCookie_v2(cookieName, cookieValue, TimeSpan_Persistance);
				isArticleVisit = true;
			}
			else // da co newsid
			{
				var d = new Date();
				var oldTime = Number(tem[i].split('_')[1]);
				if (d.getTime() - timeSpanToMillisecond_v2(TimeSpan_isVisit) >= oldTime) // kiem tra xem expire chua
				{
					isArticleVisit = true;
				}
				tem[i] = newsId + '_' + (new Date).getTime();
				cookieValue = tem.join(',');
				Log_createCookie_v2(cookieName, cookieValue, TimeSpan_Persistance);
			}
		}
	}
	
	// check is new visitor for category
	//if (Number(catId) != isNaN && Number(catId) >= 0)
	if (catId != null && catId != '' && catId != '-1')
	{
		cookieName = 'ChannelVN.Logger.c';
		cookieValue = Log_readCookie_v2(cookieName);
		if (cookieValue == null)
		{
			cookieValue = catId + '_' + (new Date).getTime();
			Log_createCookie_v2(cookieName, cookieValue, TimeSpan_Persistance);
			isCatVisit = true;
		}
		else
		{
			var tem = cookieValue.split(',');
			var i=0;
			for (i=0; i<tem.length; i++)
			{
				if (tem[i].indexOf(catId + '_') == 0)
				{
					break;
				}
			}
			
			if (i == tem.length)
			{
				cookieValue += ',' + catId + '_' + (new Date).getTime();
				Log_createCookie_v2(cookieName, cookieValue, TimeSpan_Persistance);
				isCatVisit = true;
			}
			else
			{
				var d = new Date();
				var oldTime = Number(tem[i].split('_')[1]);
				if (d.getTime() - timeSpanToMillisecond_v2(TimeSpan_isVisit) >= oldTime)
				{
					isCatVisit = true;
				}
				tem[i] = catId + '_' + (new Date).getTime();
				cookieValue = tem.join(',');
				Log_createCookie_v2(cookieName, cookieValue, TimeSpan_Persistance);
			}
		}
	}
	
	// remove special characters
	newsTitle = newsTitle.replace(/\t/g, ' '); // thay TAB = SPACE
	
	catName = catName.replace(/\t/g, ' '); // thay TAB = SPACE
	
	query = "";
	if(isLite)
	{
	    query = 'articleId=' + newsId +
			    '&articleTitle=' + encodeURIComponent(newsTitle?newsTitle:'') +
			    '&catId=' + catId +
			    '&catName=' + encodeURIComponent(catName?catName:'') +
			    '&hostName=' + encodeURIComponent(host) + 
			    '&isWebsiteVisit=' + isWebsiteVisit +
			    '&isWebsiteNewVisitor=' + isWebsiteNewVisitor +
			    '&isArticleVisit=' + isArticleVisit +
			    '&isCatVisit=' + isCatVisit +
			    '&website=' + encodeURIComponent(log_website) +
			    '&WebsiteID=' + Log_WebsiteID +
			    '&isLite=true';
	}
	else
	{
	    query = 'articleId=' + newsId +
			    '&articleTitle=' + encodeURIComponent(newsTitle?newsTitle:'') +
			    '&catId=' + catId +
			    '&catName=' + encodeURIComponent(catName?catName:'') +
			    '&hostName=' + encodeURIComponent(host) +
			    '&urlRef=' + encodeURIComponent(ref) +
			    '&browser=' + encodeURIComponent(browser) +
			    '&os=' + encodeURIComponent(os) +
			    '&keyword=' + encodeURIComponent(keyword) +
			    '&isWebsiteVisit=' + isWebsiteVisit +
			    '&isWebsiteNewVisitor=' + isWebsiteNewVisitor +
			    '&isArticleVisit=' + isArticleVisit +
			    '&isCatVisit=' + isCatVisit +
			    '&website=' + encodeURIComponent(log_website) +
			    '&resolution=' + encodeURIComponent(resolution) +
			    '&WebsiteID=' + Log_WebsiteID +
			    '&isLite=false';
    }
	Log_sendXMLHttpRequest_v2(query);
}


function Log_callLogger_finish_v2() {}
		
//Created by katz
function insertPetIcon()
{
/*
    var divhtml = '<script type="text/javascript" src="http://admicro2.vcmedia.vn/htmlads/demo_richmedia/javascripts/jQuery/jquery.js"></script><div style="width: 386px; height: 25px; margin-top: -1px;"><div id="tabCoca" style="position: absolute; width: 386px; display: block; height: 150px; clip:rect(80px 386px 110px 0px); overflow:hidden; margin-top: -87px;"><embed src="http://admicro2.vcmedia.vn/htmlads/demo_online/peticon_new/Menu_peticon.swf" width="386" height="150" wmode="transparent" allowscriptaccess="always"/></div></div>';

    //document.write(divhtml);
    document.getElementById("subMenu1").innerHTML = divhtml + "" + document.getElementById("subMenu1").innerHTML;
*/
}

/***********************************************
* Bottom slide tooltip- by Ron Grafe (mailto:grafer@REMOVETHIScolumbus.rr.com)
* Website URL: http://www.gdevresources.com
* Script modified by and available at Dynamic Drive: http://www.dynamicdrive.com/
***********************************************/

//SET TOOLTIP DESCRIPTIONS BELOW
//Extend or contract array as needed
var description=new Array()
description[0]='This is tool-tip description 1'
description[1]='<b>This is tool-tip descrition 2'
description[2]='<i>This is tool-tip description 3'

//Do not edit below here

iens6=document.all||document.getElementById
ns4=document.layers


var thename
var theobj
var thetext
var winHeight
var winPositionFromTop
var winWidth
var startH=2
var openTimer


function ietruebody(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function setObj(text,theswitch,inwidth,inheight) {
	thetext=text;
	if(iens6){
		thename = "viewer"
		theobj=document.getElementById? document.getElementById(thename):document.all.thename
		winHeight=100
			if(iens6&&document.all) {
				winPositionFromTop=!window.opera? ietruebody().clientHeight : document.body.clientHeight
				winWidth=(ietruebody().clientWidth-ietruebody().leftMargin)
			}
			if(iens6&&!document.all) {
				winPositionFromTop=window.innerHeight
				winWidth=(window.innerWidth-(ietruebody().offsetLeft+30))
			}
			if(theswitch=="override") {
				winWidth=inwidth
				winHeight=inheight
			}
		theobj.style.width=winWidth+"px"
		theobj.style.height=startH+"px";
		var datatext = text.split('$');
		//alert(text);
		if(datatext[3] == null || datatext[3] == "")
		   datatext[3] = "http://kenh14.vn/ImagesGUI/portal/header/thoi-trang.jpg" ;
		var str='';
        str+='<table cellpadding="0" cellspacing="0" border="0" width=' + winWidth + ' height=' + winHeight + '>';
        str+='            <tr>';
        str+='                <td align="center" width="100%" class="thien" style="">';
        str+='                    <div style="overflow:hidden;width:966px">';
        str+='                            <div style="overflow:hidden;padding:2px 60px;font-size:12px;color:#fbfbfb;font-family:Arial" align="left">';
        str+='                                <div style="float:left;width:60px;height:60px;border:solid 2px #bba5ad;margin-right:10px">';
        str+='                                    <img src=" '+datatext[3]+'" width="60px" height="60px;" \/>';
        str+='                                <\/div>';
        str+='                                  '+datatext[2];
        str+='                            <\/div>';
        str+='                    <\/div>';
        str+='                <\/td>';
        str+='            <\/tr>';
        str+='       <\/table>';

			if(iens6&&document.all) {
			
				theobj.style.top=ietruebody().scrollTop+winPositionFromTop+"px"
				//window.status=winPositionFromTop
				theobj.innerHTML = ""
				theobj.insertAdjacentHTML("BeforeEnd",str)
				//theobj.insertAdjacentHTML("BeforeEnd","<table cellspacing=0 width="+winWidth+" height="+winHeight+" border=0><tr><td width=100% valign=top><font type='times' size='2' style='color:black;font-weight:normal'>"+thetext+"</font></td></tr></table>")
			}
			if(iens6&&!document.all) {
			
				theobj.style.top=window.pageYOffset+winPositionFromTop+"px"
				theobj.innerHTML = ""
				theobj.innerHTML=str;
				//theobj.innerHTML="<table cellspacing=0 width="+winWidth+" height="+winHeight+" border=0><tr><td width=100% valign=top><font type='times' size='2' style='color:black;font-weight:normal'>"+thetext+"</font></td></tr></table>"
			}
	}
	if(ns4){
		thename = "nsviewer"
		theobj = eval("document."+thename)
		winPositionFromTop=window.innerHeight
		winWidth=window.innerWidth
		winHeight=100
			if(theswitch=="override") {
				winWidth=inwidth
				winHeight=inheight
			}
		theobj.moveTo(0,eval(window.pageYOffset+winPositionFromTop))
		theobj.width=winWidth
		theobj.clip.width=winWidth
		theobj.document.write("<table cellspacing=0 width="+winWidth+" height="+winHeight+" border=1><tr><td width=100% valign=top><font type='times' size='2' style='color:black;font-weight:normal'>"+thetext+"</font></td></tr></table>")
		theobj.document.close()
	}
	viewIt()
}

function viewIt() {
	if(startH<=winHeight) {
		if(iens6) {
			theobj.style.visibility="visible"
				if(iens6&&document.all) {
					theobj.style.top=(ietruebody().scrollTop+winPositionFromTop)-startH+"px"
				}
				if(iens6&&!document.all) {
					theobj.style.top=(window.pageYOffset+winPositionFromTop)-startH+"px"
				}
			theobj.style.height=startH+"px"
			startH+=2
			openTimer=setTimeout("viewIt()",10)
		}
		if(ns4) {
			theobj.visibility = "visible"
			theobj.moveTo(0,(eval(window.pageYOffset+winPositionFromTop)-startH))
			theobj.height=startH
			theobj.clip.height=(startH)
			startH+=2
			openTimer=setTimeout("viewIt()",10)
		}
	}else{
		clearTimeout(openTimer)
	}
}

function stopIt() {
	if(iens6) {
		theobj.innerHTML = ""
		theobj.style.visibility="hidden"
		startH=2
	}
	if(ns4) {
		theobj.document.write("")
		theobj.document.close()
		theobj.visibility="hidden"
		theobj.width=0
		theobj.height=0
		theobj.clip.width=0
		theobj.clip.height=0
		startH=2
	}
}


