/*
 * object holding all states of index page
 */
var TEXTCONTENT_TOP = 570;
function VIET_vnl_ui_Global() {
    this.arTabs = {
        TvGuide: {
            bInited: false, 
            sUrl: getJsonUrl({action:'program', channel:1})
        },
        Search: {
            bInited: false, 
            sUrl: '/search/',
            sLastKeyword: '',
            iLastPage: 1
        },
        OnDemand: {
            bInited: false, 
            sUrl: getJsonUrl({action:'genre', genreId:'toprated'})
        },
        Help: {
            bInited: true
        },
        EmailFriend: {
            bInited: false,
            sInitFunction: 'initEmailFriend'
        }
    };
    this.sCurrTab = 'TvGuide';

    this.sCurrLang = 'en';//$_COOKIES('lang')==null ? 'en' : $_COOKIES('lang');

    // the player
    this.bIsLive = true;
    this.iChannelId = 1;
    this.arCurrSegments = [];
    this.iCurrSegmentId = 0;
    this.iCurrGuideId = 0;
    this.oLocalTimer = null;

    this.oScrollDECE = new DECE(100);
    
    // side bar
    this.sActiveSidebar = 'popular';
}

VIET_vnl_ui_Global.prototype = {

    init: function() {
        //this.ipCheck();

        var body = /chrome/i.test(navigator.userAgent)? document.body : document.documentElement;
        this.animShowTextContent = new YAHOO.util.Scroll(body, {scroll: { to: [0, TEXTCONTENT_TOP] }}, 0.5, YAHOO.util.Easing.easeOut);
        this.animHideTextContent = new YAHOO.util.Scroll(body, {scroll: { to: [0, 0] }}, 0.5, YAHOO.util.Easing.easeOut);

	// hire useFF bottom bar for FireFox browser
	//if( /Firefox/i.test(navigator.userAgent) && $('useFF')!=null )
	//    $('useFF').style.display = 'none';
 
        oServerTime.init();
        this.replaceHref();
        var l = $_COOKIES('lang')==null ? 'en' : $_COOKIES('lang');
        this.changeLanguage(l);

        if( typeof startWith != 'undefined' ) {
        
            // randomize starting live channel
            if( startWith.type=='live' && startWith['channelId']==null ) {
                startWith['channelId']= Math.round((Math.random()*1000))%2 + 1;
            }
            oPlayer.init(startWith.type, (startWith.type=='ondemand' ? startWith.guideId : null), (startWith.type=='live' ? startWith.channelId : null));
                
            if( startWith.type=='live' ) {
                this.bIsLive = true;
                this.iChannelId = startWith.channelId;
                this.switchToLive();
            }
            else if( startWith.type=='search') {
                this.bIsLive = false;
                this.doSearch(startWith.keyword, startWith['page']);
            }
            else if( startWith.type=='tvguide' ) {
                this.bIsLive = false;

                var chId = startWith['channelId']!=null ? startWith['channelId'] : 1;
                this.arTabs.TvGuide.sUrl = getJsonUrl({action:'program', date:startWith['date'], channel:chId});
                this.showTvGuide();
            }
            else if( startWith.type=='genre' ) {
                this.bIsLive = false;

                this.arTabs.OnDemand.sUrl = getJsonUrl({action:'genre', genreId:startWith['genreId']});
                this.showOnDemand();
            }
            else if( startWith.type=='ondemand' ) {
                this.bIsLive = false;
                this.switchToOnDemand();
            }
            /*else if( startWith.type=='intro' ) {
                this.bIsLive = false;
            }*/
        }
        
        if( !oPlayer.bInited )
            oPlayer.init();
        
        //
        // init clock for live tv
        //
        this.oLocalTimer = new VIET_vnl_util_Timer(13);
        var me = this;
        this.oLocalTimer.RegisterEvent(function() { me.updateClock(); });
        this.oLocalTimer.Start();

	//this.oTogglePhimQuanTimer = new VIET_vnl_util_Timer(30);
	//this.phimquanShow = true;
        //this.oTogglePhimQuanTimer.RegisterEvent(function() {
		//	$('nav_phimquan').style.display = (me.phimquanShow==true ? 'none' : '');
		//	$('nav_xomnhac').style.display = (me.phimquanShow==true ? '' : 'none');
		//	me.phimquanShow = !me.phimquanShow;
		//});
        //this.oTogglePhimQuanTimer.Start();

        //
        // validate user login status, this has to be done before agent init
        //
        oUser.init();

        //
        // check remaining time for subscription
        //
        oAgent.init();

        //this.onWindowResize();

        // show/hide text content
        var me = this;
        window.onscroll = function() {
            me.oScrollDECE.Exec( function() { me.onWindowScroll(); } );
        }
        
        // init side bar
        this.sidebar_popular();
    },

    onWindowResize: function() {
        //if( typeof document.documentElement != 'undefined' )
        //    $('footer').style.top = Math.max(document.documentElement.clientHeight-19, 540) + 'px';
    },
    
    onWindowScroll: function() {
        var scrollTop = document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop;
        if( scrollTop<300 )
        {
            /*try {
                YAHOO.util.History.navigate("p", '');
            }
            catch(e) {}*/
            this.hideTextContent();
        }
        else if( scrollTop>=300 )
            this.showTextContent();
    },
    
    showLogin: function() {
        /*oPlayer.playpause();//.stop();
        oPlayer.hide();
        $('loginbox_close').style.display = (oAgent.needSubscribe() ? 'none' : '');
        $('dLogin').style.display = 'block';
        $('dSignup').style.display = 'none';*/
        try {
            YAHOO.util.History.navigate("p", '/account/login');
        }
        catch(e) {}
    },
    
    hideLogin: function() {
        /*oPlayer.playpause();
        oPlayer.show();
        $('dLogin').style.display = 'none';*/
        this.hideTextContent();
    },
    
    showSignup: function() {
        /*oPlayer.stop();
        oPlayer.hide();
        $('signupbox_close').style.display = (oAgent.needSubscribe() ? 'none' : '');
        $('dLogin').style.display = 'none';
        $('dSignup').style.display = 'block';*/
        try {
            YAHOO.util.History.navigate("p", '/account/register');
        }
        catch(e) {}
    },
    
    hideSignup: function() {
        /*oPlayer.playpause();
        oPlayer.show();
        $('dSignup').style.display = 'none';*/
        this.hideTextContent();
    },

    //
    // invoked when user leaves the page
    //
    finalize: function() {
        oAgent.recordLast();
    },
    
    replaceHref: function() {
        $('nav_tv_guide').href = 'javascript:oGlobal.showTvGuide();';
    },
    
    showCurrTab: function() {
        this.showTab(this.sCurrTab);                  
    },

    //
    // show tab and init if not yet inited
    //
    showTab: function(sTabName) {
        if( this.arTabs[sTabName]==null )
            return;

        this.hideTabs();

        //
        // for 'Search' tab, always load new page
        //
        if( sTabName=='Search' ) {
            var keyword = $('searchField').value!="" ? $('searchField').value : 'music';
            keyword = keyword.replace(/"/g, ''); // get rid of all "
            
            //
            // only load search page if keyword changes or page number change
            //
            var p = parseInt($('searchPage').value, 10);
            if( isNaN(p) ) p = 1;

            if( this.arTabs['Search'].sLastKeyword!=keyword || p!=this.arTabs['Search'].iLastPage ) {

                //$('loadingSearch').innerHTML = 'Searching for keyword "' + keyword + '"'; 
                //$('loadingSearch').style.display = 'block';

                //$('fr' + sTabName).src = this.arTabs[sTabName].sUrl + escape(keyword.replace(/ /g, '-').toLowerCase()) + (p>1 ? '/page/' + p : '');
                $('fr' + sTabName).src = getJsonUrl({'action':'search', 'keyword':keyword, 'page':p});

                $('searchField').value = keyword;
                this.arTabs['Search'].sLastKeyword = keyword;
                this.arTabs['Search'].iLastPage = p;
            }
        }

        //
        // for other tabs, init only once
        //
        else if( this.arTabs[sTabName]['sUrl']!=null ) {
            if( !this.arTabs[sTabName].bInited )
                $('fr' + sTabName).src = this.arTabs[sTabName].sUrl;
        }

        else if( this.arTabs[sTabName]['sInitFunction']!=null ) {
            if( !this.arTabs[sTabName].bInited )
                eval(this.arTabs[sTabName]['sInitFunction'] + '()');
        }

        $('fr' + sTabName).style.top = '0px';
        $('fr' + sTabName).style.visibility = 'visible';

        this.arTabs[sTabName].bInited = true;
    },
    
    hideTabs: function() {
        for( var s in this.arTabs ) {
            //$('fr' + s).style.display = 'none';
            $('fr' + s).style.top = '-5000px';
            $('fr' + s).style.visibility = 'hidden';
        }
    },
    
    showPlayer: function() {
        oGlobal.hideTabs();
        oPlayer.maximize();
    },

    showTvGuide: function() {
        this.sCurrTab = 'TvGuide';
        oPlayer.minimize();
        this.showCurrTab();
    },
    
    showOnDemand: function() {
        this.sCurrTab = 'OnDemand';
        oPlayer.minimize();
        this.showCurrTab();
    },
    
    showEmailFriend: function() {
        this.sCurrTab = 'EmailFriend';
        oPlayer.minimize();
        this.showCurrTab();
    },
    
    /*showHelp: function() {
        this.sCurrTab = 'Help';
        oPlayer.minimize();
        this.showCurrTab();
        $('intro_cnt_' + this.sCurrLang).scrollTop = 320;
    },
    
    showAbout: function() {
        this.sCurrTab = 'Help';
        oPlayer.minimize();
        this.showCurrTab();
        $('intro_cnt_' + this.sCurrLang).scrollTop = 0;
    },*/
    
    showTextContent: function() {
        if( !this.animShowTextContent.isAnimated() && !this.isTextContentShown()) {
            $('textcontent').style.visibility = 'visible';
            $('textcontent_submenu').style.display = 'block';
            $('footer_right').style.display = 'none';
            this.lastDocTitle = document.title;
            oPlayer.pause();
            this.animShowTextContent.animate();
        }
    },

    hideTextContent: function() {
        if( !this.animHideTextContent.isAnimated() && this.isTextContentShown() ) {
            $('textcontent').style.visibility = 'hidden';
            $('textcontent_submenu').style.display = 'none';
            $('footer_right').style.display = '';
            document.title =  this.lastDocTitle;
            oPlayer.play();
            this.animHideTextContent.animate();
        }
    },
    
    isTextContentShown: function() {
        return ($('textcontent').style.visibility!='hidden');
    },
    
    //
    // call to initiate a search; 
    // if keyword or pageNum is not specified, grab it from form;
    // if they are specified, override form;
    // if keyword changes, reset pageNum to 1
    //
    doSearch: function(keyword, pageNum) {

        if( keyword==null ) {
            if( pageNum==null ) { // user initiate the search by clicking on search button
                if( $('searchField').value==this.arTabs['Search'].sLastKeyword ) { // keyword has not change, just open and close search box
                }
                else
                    $('searchPage').value = '1';
            }
            else   // call from interface: next/previous result of the same search query
                $('searchPage').value = pageNum;
        }
        else {  // call from interface: similar tags
            $('searchField').value = keyword;
            if( pageNum==null )
                $('searchPage').value = '1';
            else
                $('searchPage').value = pageNum;
        }

        this.sCurrTab = 'Search';
        oPlayer.minimize();
        this.showCurrTab();
    },
    
    //
    // live tv
    //
    changeLiveChannel: function() {
        this.iChannelId = (this.iChannelId==1 ? 2 : 1);
        this.switchToLiveTv();
    },

    switchToLiveTv: function() {
        this.bIsLive = true;
        this.showPlayer();
        this.switchToLive();
        oPlayer.playLive(this.iChannelId);
    },

    switchToOnDemand: function() {
        this.bIsLive = false;
        this.validate();
    },
    
    switchToLive: function() {
        this.bIsLive = true;
        this.validate();
    },

    //
    // update clock for live tv
    //
    updateClock: function() {
        if( this.bIsLive ) {
            var dt = getLocalTime();
            if( $('statusBar_obj')!=null )
                $('statusBar_obj').as_setDateTime(VIET_vnl_util_ToDateString(dt, 'en', 'l')
                    + ', ' + VIET_vnl_util_ToTvGuideTime(dt) + ' ' + VIET_vnl_util_ToTvGuideTimeAmPm(dt));
            //$('airtimebox').innerHTML = VIET_vnl_util_ToDateString(dt, 'en', 'l')
            //        + ', <b>' + VIET_vnl_util_ToTvGuideTime(dt) + ' ' + VIET_vnl_util_ToTvGuideTimeAmPm(dt) + '</b>';
        }
    },

    //
    // search interface event handling
    //
    searchField_onfocus: function(field) {
        if( field.value == "enter keyword")
            field.value = "";
    },
    
    searchField_onblur: function(field) {
        if(field.value == "")
            field.value = "enter keyword";
    },
    
    searchButton_onclick: function() {
        if( $('searchField').value=="enter keyword" )
            $('searchField').value = '';
        return true;
    },
    
    //
    // adjust UI
    //
    validate: function() {
        //$('clipsIndi').style.display = this.bIsLive ? 'none' : 'block';
        //$('showInfo').className = 'showInfo' + (this.bIsLive ? 'Live' : '');

        if( $('statusBar_obj')!=null && typeof $('statusBar_obj').as_setAsLive!='undefined' )
            $('statusBar_obj').as_setAsLive(this.bIsLive);
        //$('liveondemandtxt').innerHTML = this.bIsLive ? 'LIVE' : 'ON-DEMAND';
        //$('liveondemandtxt').className = this.bIsLive ? 'livetxt' : 'ondemandtxt';

        //$('channelname').innerHTML = VIET_vnl_util_GetChannelName(this.iChannelId);
        if( $('statusBar_obj')!=null )
            $('statusBar_obj').as_setChannel(VIET_vnl_util_GetChannelName(this.iChannelId));
    },
    
    /*updateClipIndications: function(iGuideId) {
        this.arCurrSegments = [];

        var sUrl = oUser.bIsLogin && oUser.bIsSubscribed ? getJsonUrl({action:'playlist', type:'ondemand', preview:'no', guideId:iGuideId, format:'json'}) : getJsonUrl({action:'playlist', type:'ondemand', guideId:iGuideId, format:'json'});
        var me = this;
        var handleSuccess = function(o){
            try {
                me.arCurrSegments = eval("(" + o.responseText + ")");
                
                if( $('statusBar_obj')!=null )
                    $('statusBar_obj').as_setSegment(1, me.arCurrSegments.length);
            }
            catch(ex) {}
        }

        var handleFailure = function() {
        }

        YAHOO.util.Connect.asyncRequest('GET', sUrl, {success:handleSuccess, failure:handleFailure});
    },*/
    
    updateCurrClipIndi: function(iSegmentId) {
        if( this.bIsLive ) return;

        this.iCurrSegmentId = iSegmentId;
        //for( var i=0; i<this.arCurrSegments.length; i++ ) {
        //    $('clipsIndi').childNodes[i].className = 'clipIndi' + (this.arCurrSegments[i].id==iSegmentId ? 'S' : '');
        //}
        var iCurrentSegmentIndex = 0;
        for( var i=0; i<this.arCurrSegments.length; i++ ) {
            if( this.arCurrSegments[i].id==iSegmentId ) {
                iCurrentSegmentIndex = i;
                break;
            }
        }
        if( $('statusBar_obj')!=null )
            $('statusBar_obj').as_setSegment(iCurrentSegmentIndex+1, this.arCurrSegments.length);
    },
    
    updateTags: function(arTags, sPreTags) {
        //if( arTags.length<=0 ) return;
        s = '';
        for( var i=0; i<arTags.length; i++ ) {
            if( arTags[i]!='' )
                s += (s!='' ? ', ' : '') + '<a href="javascript:oGlobal.doSearch(\'' + arTags[i] + '\');">' + arTags[i] + '</a>';
        }

        var bHasPreTags = (sPreTags!=null && sPreTags!='');
        var bHasSimilar = (s!='' || bHasPreTags);

        //if( bHasSimilar )
        //    $('showTags').innerHTML = '<i>Similar</i>: ' + (bHasPreTags ? sPreTags : '') + (bHasPreTags && s!='' ? ', ' : '') + s;
    },
    
    //
    // handlers for player events
    //
    player_onClipChange: function(iSegmentId, iGuideId, sGuideTitle, dtGuideAirTime, sNormTitle) {
    
        if( iGuideId<=0 ) { 
            $('showTitle').innerHTML = '';
            $('showOtherInfo').style.visibility = 'hidden';
        }
        else {

            $('showTitle').innerHTML = sGuideTitle;
            $('showOtherInfo').style.visibility = 'visible';
            $('showEmailFriendLink').href = "javascript:showEmailFriendUI('" + sGuideTitle + "', '" + sNormTitle
                + "', " + iGuideId + ", '" + VIET_vnl_util_ToDateString(dtGuideAirTime, 'en', 'l') + "', " + this.iChannelId + ")";

            // only change rating info when guide changed
            if( iGuideId!=this.iCurrGuideId ) {
		// 01/2010 - comment this out to fix database overloading
                //oRating.updateRatingInfo(iGuideId);
            }
            
            if( !this.bIsLive ) {
                if( $('statusBar_obj')!=null )
                    $('statusBar_obj').as_setDateTime(VIET_vnl_util_ToDateString(dtGuideAirTime, 'en', 'l')
                    + ', ' + VIET_vnl_util_ToTvGuideTime(dtGuideAirTime) + ' ' + VIET_vnl_util_ToTvGuideTimeAmPm(dtGuideAirTime));
                //$('airtimebox').innerHTML = VIET_vnl_util_ToDateString(dtGuideAirTime, 'en', 'l')
                //    + ', <b>' + VIET_vnl_util_ToTvGuideTime(dtGuideAirTime) + ' ' + VIET_vnl_util_ToTvGuideTimeAmPm(dtGuideAirTime) + '</b>';
            }

            //
            // update tags
            //
            //$('showTags').innerHTML = '';

            var sPreTags = '';
            var arTemp1 = sNormTitle.split(':');
            if( arTemp1.length>1 ) {

                var sCat = trim(arTemp1[0]);
                if( sCat.indexOf('Phim')==0 ) {
                    var arTemp2 = arTemp1[1].split('-');
                    if( arTemp2.length>1 ) {

                        var sPhim = trim(arTemp2[0]);
                        var sTap = trim(arTemp2[1]);
                        if( sTap.indexOf('Tap')==0 )
                            sPreTags += '<a href="javascript:oGlobal.doSearch(\'' + sPhim + '\');">Xem trọn bộ</a>';
                    }
                }
                
                sPreTags += (sPreTags.length>0 ? ', ' : '') + '<a href="javascript:oGlobal.doSearch(\'' + sCat + '\');">' + sCat + '</a>';
            }

            var sUrl = getJsonUrl({action:'tag', guideId:iGuideId, format:'json'});
            var me = this;
            var handleSuccess = function(o){
                var obj;
                try {
                    obj = eval("(" + o.responseText + ")");
                    me.updateTags(obj, sPreTags);
                    me.updateCurrClipIndi(iSegmentId);
                }
                catch(ex) { }
            }

            var handleFailure = function() {
            }

            YAHOO.util.Connect.asyncRequest('GET', sUrl, {success:handleSuccess, failure:handleFailure});
        }
        
        this.iCurrGuideId = iGuideId;
    },
    
    /*updateChannelDisplayForOnDemandPlay: function(iGuideId) {
        var sUrl = getJsonUrl({action:'program-item', type:'info', guideId:iGuideId, format:'json'});
        var me = this;
        var handleSuccess = function(o){
            var obj;
            try {
                obj = eval("(" + o.responseText + ")");
                me.iChannelId = obj['channelId'];
                //$('channelname').innerHTML = VIET_vnl_util_GetChannelName(me.iChannelId);
                $('statusBar_obj').as_setChannel(VIET_vnl_util_GetChannelName(me.iChannelId));
            }
            catch(ex) {}
        }

        var handleFailure = function() {}

        YAHOO.util.Connect.asyncRequest('GET', sUrl, {success:handleSuccess, failure:handleFailure});
    },*/
    
    changeLanguage: function(lang) {
        //if( lang==this.sCurrLang ) return;
        this.sCurrLang = lang;

        $('footer_change_lang_lk').href = "javascript:oGlobal.changeLanguage('" + (lang=='en' ? 'vn' : 'en') + "')";
        $('footer_change_lang_lk').innerHTML = lang=='en' ? 'Tiếng Việt' : 'English';
        $('footer_login_lk').innerHTML = (lang=='en' ? 'Login / Register' : 'Đăng nhập / Đăng ký');
        $('footer_logoutbusy').innerHTML = (lang=='en' ? 'Logging out ...' : 'Đang truy xuất ...');
        $('footer_account_lk').innerHTML = (lang=='en' ? 'Account' : 'Tài khoản');
        $('footer_aboutus_lk').innerHTML = (lang=='en' ? 'About Us' : 'Về chúng tôi');
        $('footer_help_lk').innerHTML = (lang=='en' ? 'Help' : 'Giúp đỡ');
        //$('footer_subscribe_lk').innerHTML = (lang=='en' ? 'Become a Premium Member' : 'Đăng ký thành viên VIP');
        if( $('footer_logout_lk')!=null )
            $('footer_logout_lk').innerHTML = (lang=='en' ? 'Logout' : 'Truy xuất');
        
        $('nav_live_tv').className = 'nav_live_tv_' + lang;
        $('nav_on_demand_tv').className = 'nav_on_demand_tv_' + lang;
        $('nav_tv_guide').className = 'nav_tv_guide_' + lang;

        // show other info
        $('showRatingTitle').innerHTML = (lang=='en' ? 'RATE' : 'XẾP HẠNG') + ':';
        $('showRating_staruser').title = lang=='en' ? 'Please click to rate this TV program.' : 'Xin hãy bấm vào để xếp hạng chương trình TV này.';
        $('showViewsTitle').innerHTML = (lang=='en' ? 'VIEW' : 'LƯỢT XEM') + ':';
        $('showEmailFriendLink').innerHTML = (lang=='en' ? 'EMAIL friends' : 'EMAIL cho bạn');
        //$('showEmbedLink').innerHTML = (lang=='en' ? 'EMBED in blog' : 'NHÚNG vào blog');
        $('showRating_thanks').innerHTML = (lang=='en' ? 'Thanks!' : 'Cám ơn!');
        
        // email friend
        if( $('emailfriend_personalmsglabel')!=null ) {
            $('emailfriend_message').innerHTML = (lang=='en' ? 'Send this TV show to your friend' : 'Gởi chương trình TV này đến cho bạn tôi');
            $('emailfriend_labelfriendemail').innerHTML = (lang=='en' ? 'Friend emails' : 'Điện thư của bạn tôi');
            $('emailfriend_note').innerHTML = (lang=='en' ? 'Note: You can send to more than one email addresses; use commas between email addresses.' : 'Ghi chú: Bạn có thể gởi đến nhiều địa chỉ điện thư; xin dùng dấu phẩy giữa các địa chỉ.');
            $('emailfriend_submit').value = (lang=='en' ? 'Send' : 'Gởi đi');
            $('emailfriend_msgoptional').innerHTML = (lang=='en' ? 'OPTIONAL' : 'KHÔNG BẮT BUỘC');
            $('emailfriend_friendnamelabel').innerHTML = (lang=='en' ? 'Friend name' : 'Tên của bạn tôi');
            $('emailfriend_yournamelabel').innerHTML = (lang=='en' ? 'Your name' : 'Tên tôi');
            $('emailfriend_youremaillabel').innerHTML = (lang=='en' ? 'Your email' : 'Điện thư của tôi');
            $('emailfriend_personalmsglabel').innerHTML = (lang=='en' ? 'Personal message' : 'Lời nhắn');
        }
        
        // remember preference
        setCookie('lang', lang, 365*5);
        
        // refresh current text page
        try {
            var p = YAHOO.util.History.getCurrentState("p");
            loadTextContentPage( p!='' ? p + '/lang/' + lang : '' );
        }
        catch(e) {} // if Browser History Manager is not yet initialized, just ignore
    },
    
    /*changeHelpLanguage: function(lang) {
        if( lang==this.sCurrLang ) return;

        // hide old
        $('intro_cnt_' + this.sCurrLang).style.display = 'none';

        // show new
        this.sCurrLang = lang;
        $('intro_cnt_' + this.sCurrLang).style.display = 'block';
        $('introTt_txt2').innerHTML = this.sCurrLang=='en' ? 'Introduction / Help' : 'Giới thiệu / Hướng dẫn sử dụng';

        // remember preference
        setCookie('lang', this.sCurrLang, 365*5);
    },*/
    
    /*ipCheck: function() {
        var ck = $_COOKIES('rg');
        if( ck==null )
            YAHOO.util.Connect.asyncRequest('GET', '/json/checkip.php', {success: function(o) {
                setCookie('rg', o.responseText, 5*365);
                if( o.responseText=='vn' )
                    location.replace('/chip.html');
            }, failure: function() {}});
        else if( ck=='vn' )
            location.replace('/chip.html');
    },*/

    // compose side bar popular content
    sidebar_popular:function() {
        var me = this;
        var handleSuccess = function(o){
            try {
                var res = eval("(" + o.responseText + ")");
                var keywords = res.keywords;
                var s = '';
                var bAdminUser = (oUser.bIsLogin==true) && (oUser.iAccountId==9);
                for( var i=0; i<keywords.length; i++ ) {
                    var arrKeyword = keywords[i];
                    s += '<li><a class="normal" href="javascript:oGlobal.doSearch(\'' + arrKeyword.keyword + '\')">' + arrKeyword.dKeyword 
                        + (bAdminUser ? ' (' + arrKeyword.score + ')' : '') 
                        + '</a>'
                        + (bAdminUser ? '<a class="admindelete" href="javascript:oGlobal.admin_deletePopularKeyword(' + arrKeyword.id + ')">x</a>' : '')
                        + '</li>';
                }
                $('sidebar_content_popular_list').innerHTML = s;
                $('sidebar_content_popular').style.height = $('sidebar_content_popular_list').offsetHeight + 'px';
            }
            catch(ex) {}
        }
        YAHOO.util.Connect.asyncRequest('GET', '/zf/tag/getpopularkeyword', {success:handleSuccess, failure:function() {}});
    },
    
    admin_insertPopularKeyword: function() {
        var dKeyword = $('admin_popularkeyword').value;
        if( dKeyword=='' ) {
            this.sidebar_popular();
            return;
        }

        var score = $('admin_popularkeywordscore').value;
        if( score=='' )
            score = 0;

        var me = this;
        var handleSuccess = function(o){
            try {
                var res = eval("(" + o.responseText + ")");
                if( res.success==true ) {
                    $('admin_popularkeyword').value = $('admin_popularkeywordscore').value = '';
                    me.sidebar_popular();
                }
                else
                    alert('ERROR: ' + res.errorCode);
            }
            catch(ex) {
                alert('ERROR: ' + ex);
            }
        }
        YAHOO.util.Connect.asyncRequest('POST', '/zf/tag/insertpopularkeyword', {success:handleSuccess, failure:function() {}}, 'dKeyword=' + dKeyword + '&score=' + score);
    },
    
    admin_deletePopularKeyword: function(id) {
        var me = this;
        var handleSuccess = function(o){
            try {
                var res = eval("(" + o.responseText + ")");
                if( res.success==true )
                    me.sidebar_popular();
                else
                    alert('ERROR: ' + res.errorCode);
            }
            catch(ex) {
                alert('ERROR: ' + ex);
            }
        }
        YAHOO.util.Connect.asyncRequest('GET', '/zf/tag/deletepopularkeyword/id/' + id, {success:handleSuccess, failure:function() {}});
    },
    
    sidebar_scroll: function(dir) {
        var ele = $('sidebar_content_' + this.sActiveSidebar);
        
        // coordinate of scrolling panel relative to window
        var topScroll = ele.offsetTop;
        var bottomScroll = ele.offsetHeight + ele.offsetTop;
        
        // window coordinate
        var winTop = 0, winBottom = 250;
        
        // end condition
        var needScroll = (dir=='up' && bottomScroll>winBottom) || (dir=='down' && topScroll<winTop);
        
        if( needScroll ) {
            var pageSize = 200;
            var anim = new YAHOO.util.Motion(ele, {points: { by: [0, (dir=='up' ? (-1) : 1)*pageSize] } }, 0.5, YAHOO.util.Easing.easeOut);
            anim.animate();
        }
    },
    
    textcontent_accountsubscribe: function(paramString) {
    
        if( typeof accountsubscribe_render == 'undefined' )
            YAHOO.util.Get.script("/js/VIET.vnl.ui.Subscription.js", { onSuccess: function() { accountsubscribe_render(); } });
        else
            accountsubscribe_render();
    },
    
    
    textcontent_aboutcontactus: function(paramString) {
    
        if( typeof aboutcontactus_render == 'undefined' )
            YAHOO.util.Get.script("/js/VIET.vnl.ui.ContactUs.js", { onSuccess: function() { aboutcontactus_render(); } });
        else
            aboutcontactus_render();
    },
   
    navigate_textcontent: function(page) {
        this.showTextContent();
        YAHOO.util.History.navigate("p", page);
    }
    
}
var oGlobal = new VIET_vnl_ui_Global();

/*
 * for communication with the iframes in index page
 */
function onCloseOnDemand() {
    oGlobal.showPlayer();
}

function onCloseTvGuide() {
    oGlobal.showPlayer();
}

function onCloseSearch() {
    oGlobal.showPlayer();
}

function onCloseHelp() {
    oGlobal.showPlayer();
}

function onOnDemandLoaded() {
    //$('loadingOnDemand').style.display = 'none';
}

function onTvGuideLoaded() {
    //$('loadingTvGuide').style.display = 'none';
}

function onSearchLoaded() {
    //$('loadingSearch').style.display = 'none';
}

function onSearchRequest(keyword, pageNum) {
    oGlobal.doSearch(keyword, pageNum);
}

function playGuide(iGuideId) {
    oGlobal.showPlayer();
    oGlobal.switchToOnDemand();
    //oGlobal.updateChannelDisplayForOnDemandPlay(iGuideId);
    oPlayer.playOnDemand(iGuideId);
    //oGlobal.updateClipIndications(iGuideId);
}


//----------- flash interaction --------------------------------------------//
function js_setChannel(channel_direction) {
    oGlobal.changeLiveChannel();
}

function js_setSegment(segmentNumber){
    oPlayer.playItem(segmentNumber-1);
}

//function called back when a button is pressed in Flash
function moveSidebar(direction){
    //$('sidebar_title_obj').as_set_text('RELATED');
}

var textContentMenu =
    {'about': {text_en:'About Us', text_vn:'Về chúng tôi', link:'/about/index', submenu:
        {'overview': {text_en:'Overview', text_vn:'Giới thiệu', link:'/about/index'},
         //'team': {text_en:'Our Team', text_vn:'Nhóm phát triển', link:'/about/team'},
         'contact': {text_en:'Contact Us', text_vn:'Liên lạc chúng tôi', link:'/about/contactus'},
         'privacy': {text_en:'Privacy Policy', text_vn:'Chính sách bảo mật', link:'/about/privacy'},
         'term': {text_en:'Terms of Use', text_vn:'Điều kiện sử dụng', link:'/about/term'}
         }},
     'help': {text_en:'Help', text_vn:'Giúp đỡ', link:'/help/index', submenu:
        {'using': {text_en:'Using the site', text_vn:'Hướng dẫn sử dụng', link:'/help/index'},
         'faq': {text_en:'Frequently asked questions', text_vn:'Câu hỏi thường gặp', link:'/help/faq'}
        }},
     'account': {text_en:'Account', text_vn:'Tài khoản', link:'/account/index', submenu:
        {'login': {text_en:'Login', text_vn:'Truy nhập', link:'/account/login', login:false},
         'register': {text_en:'Register', text_vn:'Đăng ký', link:'/account/register', login:false},
         'forgotpassword': {text_en:'Forgot Password', text_vn:'Quên mật mã', link:'/account/forgotpassword', login:false},
         'overview': {text_en:'Overview', text_vn:'Sơ lược', link:'/account/index', login:true},
         'changepassword': {text_en:'Change Password', text_vn:'Đổi mật mã', link:'/account/changepassword', login:true}
        }},
     'gesturepassword': {
	text_en:'Graphical Password', 
	text_vn:'Mat ma dung hinh ve', 
	link:'/gesturepassword/index',
	submenu: {
	    'intro': {
		text_en:'Introduction', 
		text_vn:'Giới thiệu', 
		link:'/gesturepassword/index'},
	    'login': {
		text_en:'Login Using Graphical Password', 
		text_vn:'Truy Nhập Bằng Mật Mã Đồ Họa', 
		link:'/gesturepassword/login'},
	    'set': {
		text_en:'Set New Graphical Password',
		text_vn:'Tạo Mật Mã Đồ Họa Mới',
		link:'/gesturepassword/set'}
	}
     }
    };
function renderContentMenu(controller, action) {
    var s = '<ul>';
    if( textContentMenu[controller]!=null && textContentMenu[controller]['submenu']!=null ) {
        var submenus = textContentMenu[controller]['submenu'];
        for( var name in submenus ) {
            var submenu = submenus[name];
            var urlObj = parseTextContentUrl('http://vietnamlive.tv' + submenu['link']);
            if( submenu['login']==null || oUser.bIsLogin==submenu['login'] )
                s += '<li><a href="' + submenu['link'] + '" class="' + (urlObj.action==action ? 'showingSubmenu' : 'submenu') + '">' + submenu['text_' + oGlobal.sCurrLang] + '</a></li>';
        }
    }
    s += '</ul>';
    $('textcontent_submenu_content').innerHTML = s;
    processTextContentAnchors($('textcontent_submenu_content'));
}
         
//----------- text content -------------------------------------------------//
function loadTextContentPage(page, formId) {

    if( page=='' )
        page = '/about/index';

    // google analytics
    pageTracker._trackPageview(page);

    var urlObj = parseTextContentUrl(page, true);
    if( urlObj.type!='internal' ) // this shouldn't happen but just in case
        return;

    var controller = urlObj.controller, action = urlObj.action, paramString = urlObj.paramString;
    renderContentMenu(controller, action);

    var name = 'textcontent_' + controller + action;
    if( $(name)==null ) { // create panel if not already created
        var d = document.createElement('div');
        d.id = name;
        d.className = 'textcontent_wrapper';
        //d.innerHTML = '<div style="height:600px;">&nbsp;</div>'; // keep scrollbar always showing to prevent shifting layout
        $('textcontent').appendChild(d);
    }

    var divs = $('textcontent').childNodes;
    for( var i in divs ) {
        if ( (typeof divs[i].tagName=='undefined') || (divs[i].tagName.toLowerCase()!='div') )
            continue;

        divs[i].style.display = 'none';
    }
    
    var panel = $(name);
    panel.style.display = 'block';

    if( eval('typeof oGlobal.textcontent_' + controller + action)=='function' ) {

        // if action is implemented
        eval('oGlobal.textcontent_' + controller + action + '("' + paramString + '")');

    }
    else {

        if( formId==null ) // GET method
            panel.innerHTML = '<div class="textcontent_loading">Loading ...</div>';

        // if action is not implemented, use generic action loader
        //var me = this;
        var handleSuccess = function(o){
            try {
                var s = o.responseText;
                var startMark = '<!-- 909243kljds92034jfkdls -->';
                var endMark = '<!-- 909243kljds92034jfkdls -->';
                var startIndex = s.indexOf(startMark);
                var error = false;
                if( startIndex>=0 ) {
                    s = s.substring(startIndex + startMark.length);
                    var endIndex = s.indexOf(endMark);
                    if( endIndex>=0 ) {
                        s = s.substring(0, endIndex);

                        // page title
                        var matches = /\<title\>(.*?)\<\/title\>/i.exec(o.responseText);
                        if( matches!=null && matches.length>1 && oGlobal.isTextContentShown() ) {
                            document.title = matches[1];
                        }
                    }
                    else
                        error = true;
                }
                else
                    error = true;

                panel.innerHTML = (error ? '<h1>Error: Page (/' + controller + '/' + action + ') not found!</h1>' : s);
                processTextContentAnchors(panel);
                processForms(panel);
                
                $('textcontent').style.height = Math.max(1000, panel.offsetHeight) + 'px';
        
                // call function for tail processing
                //if( eval('typeof show_' + controller + action + '_tail')=='function' )
                //    eval('show_' + controller + action + '_tail' + '()');
                
                // adjust text-content menu and submenu css
                var anchors = $('footer').getElementsByTagName("a");
                for( i=0, len=anchors.length; i<len; i++ ) {
                    anchor = anchors[i];
                    var urlObj = parseTextContentUrl(anchor.getAttribute('href'));
                    if( urlObj.type=='internal' && urlObj['controller']!=null )
                        anchor.className = (urlObj['action']=='index' && urlObj.controller==controller ? 'showingMenu' : '');
                }
            }
            catch(ex) { }
        }

        if( formId!=null ) // POST method
            YAHOO.util.Connect.asyncRequest('POST', '/' + controller + '/' + action + (paramString!='' ? '/' + paramString : '') + '/lang/' + oGlobal.sCurrLang, {success:handleSuccess, failure:function() {}}, formToQueryString(formId));
        else
            YAHOO.util.Connect.asyncRequest('GET', '/' + controller + '/' + action + (paramString!='' ? '/' + paramString : '') + '/lang/' + oGlobal.sCurrLang, {success:handleSuccess, failure:function(){}, argument:[]});
    }
}

//
// return url query string for all fields in form
//
function formToQueryString(formId) {

    var f = $(formId);
    if( f==null ) return '';
    
    var s = '';
    var inputs = f.getElementsByTagName('input');
    for( var i=0; i<inputs.length; i++ ) {
        if( inputs[i].type=='text' || inputs[i].type=='password' || inputs[i].type=='hidden' || (inputs[i].type=='checkbox' && inputs[i].checked) )
            s += (s!='' ? '&' : '') + inputs[i].name + '=' + inputs[i].value;
    }

    var inputs = f.getElementsByTagName('textarea');
    for( var i=0; i<inputs.length; i++ )
        s += (s!='' ? '&' : '') + inputs[i].name + '=' + inputs[i].value;

    var inputs = f.getElementsByTagName('select');
    for( var i=0; i<inputs.length; i++ ) {
        var select = inputs[i];
        s += (s!='' ? '&' : '') + select.name + '=' + select.options[select.selectedIndex].value;
    }

    // TODO: re-check radio

    return s;
}

//
// override href by javascript actions
//
function processTextContentAnchors(container) {
    var i, len, anchors, anchor;
    anchors = (container || document).getElementsByTagName("a");
    for( i=0, len=anchors.length; i<len; i++ ) {
        anchor = anchors[i];

        var urlObj = parseTextContentUrl(anchor.getAttribute('href'));
        if( urlObj.type=='internal' ) {
            YAHOO.util.Event.addListener(anchor, "click", function (evt) {
                var urlObj = parseTextContentUrl(this.getAttribute("href"));
                var page = '/' + urlObj.controller + '/' + urlObj.action// + (urlObj.controller=='account' ? '' : '/a')
                    //+ (urlObj.params['lang']==null ? '/lang/' + oGlobal.sCurrLang : '') // always specify language
                    + (urlObj.paramString!='' ? '/' + urlObj.paramString : '');
                oGlobal.showTextContent();
                try {
                    YAHOO.util.History.navigate("p", page);
                } catch (e) {
                    loadTextContentPage(page);
                }
                YAHOO.util.Event.preventDefault(evt);
            });
        }
        else if( urlObj.type=='anchor' ) {
            YAHOO.util.Event.addListener(anchor, "click", function (evt) {
                var urlObj = parseTextContentUrl(this.getAttribute("href"));
                textcontent_gotoanchor(urlObj.paramString);
                YAHOO.util.Event.preventDefault(evt);
            });
        }
    }
}

//
// override form actions by javascript actions
//
function processForms(container) {
    var forms = (container || document).getElementsByTagName('form');
    for( var i=0; i<forms.length; i++ ) {

        var form = forms[i];
        var urlObj = parseTextContentUrl(form.getAttribute('action'));

        if( urlObj.type!='internal' ) // skip external and javascript links
            continue;

        // default form id
        var formId = form.getAttribute('id');
        if( formId==null || formId=='' ) {
            form.setAttribute('id', urlObj.controller + '_' + urlObj.action + '_form');
            formId = form.getAttribute('id');
        }

        var page = '/' + urlObj.controller + '/' + urlObj.action + (urlObj.controller=='account' ? '' : '/a')
            + (urlObj.params['lang']==null ? '/lang/' + oGlobal.sCurrLang : '') // always specify language
            + (urlObj.paramString!='' ? '/' + urlObj.paramString : '');
        form.setAttribute('action', 'javascript:loadTextContentPage("' + page + '", "' + formId + '")');
    }
}

//
// parse url like http://vmdb.com/song/view/id/2536 into controller, action, and list of params
//
function parseTextContentUrl(url, show) {
    var res = {'type':'internal', 'controller':'index', 'action':'index', 'params': [], 'paramString' : ''};

    if( url.indexOf('javascript:')==0 )
        res.type = 'javascript';
    else if( url.indexOf('#')==0 ) {
        res.type = 'anchor';
        res.paramString = url.substring(1);
    }
    else {
    
        var httpIndex = url.indexOf('http');
        var matches = /^http.*vietnamlive\.tv\/([^\#]*)/i.exec(url);

        if( httpIndex==0 && matches==null )
            res.type = 'external';
        else {

            // assume all internal links are absolute for now 

            var page = httpIndex==0 ? matches[1] : url.substring(1);

            var words = page.split('/');
            if( words.length>0 && words[0]!='' )
                res.controller = words[0];

            if( words.length>1 && words[1]!='' )
                res.action = words[1];
                
            var params = [];
            var paramString = '';
            if( words.length>2 ) {
                for( var j=2; j<words.length; j+=2 ) {
                    params[words[j]] = words[j+1];
                    paramString += (paramString=='' ? '' : '/') + words[j] + '/' + words[j+1];
                }
            }
            res.params = params;
            res.paramString = paramString;
        }
    }

    return res;
}

function textcontent_gotoanchor(anchor) {
    var links = document.getElementsByTagName("a");
    for( var i=0, len = links.length; i<len; i++ ) {
        var link = links[i];
        if( link.getAttribute('name')==anchor ) {
            var anim = new YAHOO.util.Scroll( /chrome/i.test(navigator.userAgent)? document.body : document.documentElement, {scroll: { to: [0, link.offsetTop + TEXTCONTENT_TOP] }}, 0.5, YAHOO.util.Easing.easeOut);
            anim.animate();
            break;
        }
    }
}

function accountsubscribe_showpayform(payby) {
    $('accountsubscribe_payby_cc_panel').style.display = payby=='cc' ? 'block' : 'none';
    $('accountsubscribe_payby_paypal_panel').style.display = payby=='paypal' ? 'block' : 'none';
}


//
// validate a form field and split out error messages
// support: required, requiredemail, retypepassword, ccnumber (credit card number), expire (expiration date)
//
function formfield_validation(type, params) {
    var fieldId = params['fieldId'];
    var labelId = params['labelId'];
    var lang = oGlobal.sCurrLang;

    var errMsg = '';
    if( type=='required' )
        errMsg = $(fieldId).value=='' ? (lang=='en' ? $(labelId).innerHTML + ' is required.' : 'Cần phải điền ' + $(labelId).innerHTML + '.') : '';
    else if( type=='requiredemail' )
        errMsg = $(fieldId).value=='' ? (lang=='en' ? $(labelId).innerHTML + ' is required.' : 'Cần phải điền ' + $(labelId).innerHTML + '.') : (validEmail($(fieldId).value) ? '' : (lang=='en' ? 'Email syntax error.' : 'Điện thư không hợp lệ.') );
    else if( type=='retypepassword' )
        errMsg = $(fieldId).value!=$(params['passwordFieldId']).value ? (lang=='en' ? 'Password not match.' : 'Mật mã không trùng khớp.') : '';
    else if( type=='ccnumber' ) {
        $(fieldId).value = $(fieldId).value.replace(/[^\d]/g, '');
        errMsg = $(fieldId).value=='' ? (lang=='en' ? $(labelId).innerHTML + ' is required.' : 'Cần phải điền ' + $(labelId).innerHTML + '.') : '';
    }
    else if( type=='expire' ) {
        errMsg = expireDate_validation($(fieldId).value, $(params['expMonthFieldId']).value)==true ? '' : (lang=='en' ? 'Card expired.' : 'Thẻ đã hết hạn');
    }
    
    if( $(params['errorMsgId'])!=null )
        $(params['errorMsgId']).innerHTML = errMsg;

    return errMsg;
}

function register_formfield_validation(type, params) {

    var fieldId = params['fieldId'];
    var labelId = params['labelId'];
    var errorMsgId = params['errorMsgId'];

    if( $(fieldId)==null ) return;

    $(fieldId).onblur = function() {
        formfield_validation(type, params);
    }
    
    if( type=='expire' ) {
        $(params['expMonthFieldId']).onblur = function() {
            formfield_validation(type, params);
            //$(errorMsgId).innerHTML = expireDate_validation($(fieldId).value, $(params['expMonthFieldId']).value)==true ? '' : (lang=='en' ? 'Card expired.' : 'Thẻ đã hết hạn');
        }
    }
}

function expireDate_validation(sMonth, sYear) {
    var d = VIET_vnl_util_ParseDateTimeFromMySQL(sYear + '-' + sMonth + '-1 00:00:00');
    var today = getLocalTime();
    var d2 = VIET_vnl_util_ParseDateTimeFromMySQL(today.getFullYear() + '-' + (today.getMonth() + 1) + '-1 00:00:00');
    return d.getTime() >= d2.getTime();
}


function form_validation(fields) {
    var success = true;
    for( var i=0, len=fields.length; i<len; i++ ) {
        var params = fields[i];
        if( formfield_validation(params.type, params)!='' )
            success = false;
    }
    return success;
}

function showEmailFriendUI(guideTitle, guideNormTitle, guideId, airTime, channelId) {
    oGlobal.showEmailFriend();
    $('emailfriend_showtitle').innerHTML = guideTitle;
    $('emailfriend_guideTitle').value = guideTitle;
    $('emailfriend_guideNormTitle').value = guideNormTitle;
    $('emailfriend_guideId').value = guideId;
    $('emailfriend_airtime').value = airTime;
    $('emailfriend_channel').value = channelId==2 ? 'HTV-9' : 'HTV-7';
    if( oUser.bIsLogin ) {
        $('emailfriend_yourname').value = oUser.sFirstName + ' ' + oUser.sLastName;
        $('emailfriend_youremail').value = oUser.sEmail;
    }
    $('emailfriend_working').innerHTML = '';
    $('emailfriend_friendemail').focus();
}

function hideEmailFriendUI() {
    oGlobal.showPlayer();
}

function initEmailFriend() {
    var lang = oGlobal.sCurrLang;
    $('frEmailFriend').innerHTML = 
            '<div id="emailfriend_pageTt">'
        +       '<div id="emailfriend_close" class="frame_closebu"><a class="frame_closebu" href="javascript:hideEmailFriendUI();" title="Close Email Friend and resume TV">Close</a></div>'
        +   '</div>'
        +   '<div id="emailfriend_bdr" class="frame_bdr">'
        +       '<div id="emailfriend_cnt" class="frame_cnt">'
        +           '<form action="javascript:emailFriendSubmit()" method="post">'
        +           '<input type="hidden" id="emailfriend_guideTitle" value="" />'
        +           '<input type="hidden" id="emailfriend_guideNormTitle" value="" />'
        +           '<input type="hidden" id="emailfriend_guideId" value="0" />'
        +           '<input type="hidden" id="emailfriend_airtime" value="" />'
        +           '<input type="hidden" id="emailfriend_channel" value="" />'
        +           '<table cellpadding="0" cellspacing="2" border="0" class="emailfriend_form">'
        +           '<tr><td></td><td class="emailfriend_message">'
        +                   '<span id="emailfriend_message">' + (lang=='en' ? 'Send this TV show to your friend' : 'Gởi chương trình TV này đến cho bạn tôi') + '</span>: '
        +                   '<span id="emailfriend_showtitle" style="font-weight:bold;color:#EADDA2;"></span>'
        +               '</td></tr>'
        +           '<tr><td></td><td id="emailfriend_working"></td></tr>'
        +           '<tr><td id="emailfriend_labelfriendemail" class="emailfriend_label">' + (lang=='en' ? 'Friend emails' : 'Điện thư của bạn tôi') + ' *</td>'
        +               '<td class="emailfriend_input"><input id="emailfriend_friendemail" class="emailfriend_textinput" type="text" /> '
        +                   '<input id="emailfriend_submit" type="submit" value="' + (lang=='en' ? 'Send' : 'Gởi đi') + '" class="emailfriend_submit" /></td>'
        +           '</tr>'
        +           '<tr><td></td><td id="emailfriend_note" class="emailfriend_message">'
        +                   (lang=='en' ? 'Note: You can send to more than one email addresses; use commas between email addresses.' : 'Ghi chú: Có thể gởi đến nhiều địa chỉ điện thư; xin dùng dấu phẩy giữa các địa chỉ.')
        +               '</td></tr>'
        +           '<tr><td id="emailfriend_msgoptional" class="emailfriend_label" style="padding:10px 0px 5px 0px;">'
        +                   (lang=='en' ? 'OPTIONAL' : 'KHÔNG BẮT BUỘC')
        +               '</td><td></td></tr>'
        +           '<tr><td id="emailfriend_friendnamelabel" class="emailfriend_label">' + (lang=='en' ? 'Friend name' : 'Tên của bạn tôi') + '</td>'
        +               '<td class="emailfriend_input"><input id="emailfriend_friendname" class="emailfriend_textinput" type="text" /></td>'
        +           '</tr>'
        +           '<tr><td id="emailfriend_yournamelabel" class="emailfriend_label">' + (lang=='en' ? 'Your name' : 'Tên tôi') + '</td>'
        +               '<td class="emailfriend_input"><input id="emailfriend_yourname" class="emailfriend_textinput" type="text" /></td>'
        +           '</tr>'
        +           '<tr><td id="emailfriend_youremaillabel" class="emailfriend_label">' + (lang=='en' ? 'Your email' : 'Điện thư của tôi') + '</td>'
        +               '<td class="emailfriend_input"><input id="emailfriend_youremail" class="emailfriend_textinput" type="text" /></td>'
        +           '</tr>'
        +           '<tr><td id="emailfriend_personalmsglabel" class="emailfriend_label" style="vertical-align:top;">' + (lang=='en' ? 'Personal message' : 'Lời nhắn') + '</td>'
        +               '<td class="emailfriend_input"><textarea id="emailfriend_personalmsg" class="emailfriend_textinput" style="width:350px;height:100px;"></textarea></td>'
        +           '</tr>'
        +           '</table>'
        +           '</form>'
        +       '</div>'
        +   '</div>';
}

function emailFriendSubmit() {
    if( $('emailfriend_friendemail').value=='' ) {
        $('emailfriend_working').className = 'error';
        $('emailfriend_working').innerHTML = oGlobal.sCurrLang=='en' ? 'Please provide your friend email.' : 'Cần nhập địa chỉ điện thư.';
        return;
    }

    $('emailfriend_working').className = '';
    $('emailfriend_working').innerHTML = oGlobal.sCurrLang=='en' ? 'Sending emails ...' : 'Đang gởi điện thư ...';

    var handleSuccess = function(o){
        try {
            var res = eval("(" + o.responseText + ")");
            if( res.success ) {
                $('emailfriend_working').className = 'success';
                $('emailfriend_working').innerHTML = oGlobal.sCurrLang=='en' ? 'Send emails to your friends successfully.' : 'Đã gởi thành công điện thư.';
                
                // clear out fields
                $('emailfriend_friendemail').value = $('emailfriend_friendname').value = $('emailfriend_personalmsg').value = '';
            }
            else {
                $('emailfriend_working').className = 'error';
                if( res.errorCode==1 )
                    $('emailfriend_working').innerHTML = oGlobal.sCurrLang=='en' ? 'Invalid email addresses. Please check.' : 'Địa chỉ điện thư không hợp lệ. Xin kiểm tra lại.';
                else
                    $('emailfriend_working').innerHTML = oGlobal.sCurrLang=='en' ? 'System error. Please let us know.' : 'Hệ thống bị lỗi. Xin cho chúng tôi biết.';
            }
        }
        catch(ex) {}
    }
    YAHOO.util.Connect.asyncRequest('POST', '/zf/email/tofriend', {success:handleSuccess, failure:function() {}}, 
        'friendEmails=' + $('emailfriend_friendemail').value + '&friendName=' + $('emailfriend_friendname').value
        + '&guideTitle=' + $('emailfriend_guideTitle').value + '&guideNormTitle=' + $('emailfriend_guideNormTitle').value
        + '&guideId=' + $('emailfriend_guideId').value
        + '&airtime=' + $('emailfriend_airtime').value + '&channel=' + $('emailfriend_channel').value
        + '&yourName=' + $('emailfriend_yourname').value + '&yourEmail=' + $('emailfriend_youremail').value
        + '&yourMessage=' + $('emailfriend_personalmsg').value);
}

