function $(id) { return document.getElementById(id) }
function getLang() {
    return ($_COOKIES('lang')=='en' ? 'en' : 'vn'); // language - default = vn
}
var lang = getLang();

//
// date time functions
//

/*function VIET_pq_util_ToDateTimeWatched(dt) {
    //var h = dt.getHours();
    //var min = dt.getMinutes();
    //var s = dt.getSeconds();
    return (dt.getMonth()+1) + '/' + dt.getDate() + '/' + dt.getFullYear();
}*/



function VIET_vnl_util_ParseDateTimeFromMySQL(s) {
    var ar = s.split(' '), sd = ar[0], st = ar[1];
    var arD = sd.split('-'), arT = st.split(':');
    var dt = new Date(arD[0], parseInt(arD[1], 10)-1, arD[2], arT[0], arT[1], arT[2], 0);
    /*dt.setDate(1); // need this to prevent month moving when today is 31
    dt.setFullYear(arD[0]); dt.setMonth(parseInt(arD[1], 10)-1); dt.setDate(arD[2]);
    dt.setHours(arT[0]); dt.setMinutes(arT[1]); dt.setSeconds(arT[2]);*/
    return dt;
}
function VIET_vnl_util_ToMySQLTime(dt) {
    var m = dt.getMonth()+1;
    var d = dt.getDate();
    var h = dt.getHours();
    var min = dt.getMinutes();
    var s = dt.getSeconds();
    return dt.getFullYear() + '-' + (m<10 ? '0' : '') + m + '-' + (d<10 ? '0' : '') + d
        + ' ' + (h<10 ? '0' : '') + h + ':' + (min<10 ? '0' : '') + min + ':' + (s<10 ? '0' : '') + s;
}
/*function VIET_vnl_util_ToTvGuideTime(dt) {
    return (dt.getHours()>12 ? (dt.getHours()-12) : dt.getHours()) + ':' + (dt.getMinutes()<10 ? '0' : '') + dt.getMinutes();
}
function VIET_vnl_util_ToTvGuideTimeAmPm(dt) {
    return (dt.getHours()<12 ? 'AM' : 'PM');
}*/

//
// Display month in this format: September 2007.
// sLang: language - optional (default = English) - 'en' for English, 'vn' for Vietnamese
// sVer: version (short or long) - optional (default = long) - 's' for short, 'l' for long
//
function VIET_vnl_util_ToMonthString(dt, sLang, sVer) {

    // language
    if( sLang==null ) sLang='en';
    var arM = VIET_vnl_util_MonthNames[sLang];
    if( arM==null )
        arM = VIET_vnl_util_MonthNames['en'];

    // version
    if( sVer==null ) sVer = 'l';
    var arM2 = arM[sVer];
    if( arM2==null )
        arM2 = arM['l'];

    return (sLang=='vn' ? 'Thang ' : '') + arM2[dt.getMonth()] + (sLang=='vn' ? ', ' : ' ') + dt.getFullYear();
}

//
// Display date in this format: Friday, November 2, 2007
// sLang: language - optional (default = English) - 'en' for English, 'vn' for Vietnamese
// sVer: version (short or long) - optional (default = long) - 's' for short, 'l' for long
//
function VIET_vnl_util_ToDateString(dt, sLang, sVer) {

    // language
    if( sLang==null ) sLang='en';
    var arD = VIET_vnl_util_DateNames[sLang];
    if( arD==null )
        arD = VIET_vnl_util_DateNames['en'];

    var arM = VIET_vnl_util_MonthNames[sLang];
    if( arM==null )
        arM = VIET_vnl_util_MonthNames['en'];
    
    // version
    if( sVer==null ) sVer = 'l';
    var arD2 = arD[sVer];
    if( arD2==null ) 
        arD2 = arD['l'];
    var arM2 = arM[sVer];
    if( arM2==null )
        arM2 = arM['l'];

    if( sLang=='vn' ) {
        if( sVer=='xs' )
            return dt.getDate() + ' tháng ' + arM2[dt.getMonth()];
        else
            return arD2[dt.getDay()] + ', ' + dt.getDate() + ' tháng ' + arM2[dt.getMonth()] + ', ' + dt.getFullYear();
    }
    else if( sLang=='en' ) {
        if( sVer=='xs' )
            return arM2[dt.getMonth()] + ' ' + dt.getDate();
        else
            return arD2[dt.getDay()] + ', ' + arM2[dt.getMonth()] + ' ' + dt.getDate() + ', ' + dt.getFullYear();
    }
}

var VIET_vnl_util_MonthNames = {
    en: {
            l: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
            s: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
            xs: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']//['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
        },
    vn: {
            l: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
        }
};
var VIET_vnl_util_DateNames = {
    en: {
            l: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
            s: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
            xs: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
    },
    vn: {
            l: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy']
    }
}

//
// DECE: Delay Execution on Continuous Events
//
function DECE( piDelay )
{
    var thExec        = null;
    this.Exec            = function( pFunction, paArgs )
    {
        if( thExec!=null )
        {
            if( thExec.bRunning==null || thExec.bRunning==false )
            {
                // last call is not yet started -> cancel it
                clearTimeout(thExec);
            }
            else
            {
                // last call is running -> let it run and schedule another thread
            }
        }

        //
        // if already started and running, there is nothing we can do;
        // just execute another instance
        //

        thExec    = setTimeout(
            function()
            {
                thExec.bRunning = true;
                if( paArgs==null )
                    pFunction()
                else
                    pFunction(paArgs);
                thExec.bRunning = false;
            },
            piDelay );
    }
}

//
// This utility function resolves the string movieName to a Flash object reference based on browser type.
//
function getMovieName(movieName){
      if (navigator.appName.indexOf("Microsoft") != -1) {
      return window[movieName]
    }else {
      return document[movieName]
    }
}

function trim(s) {
    return s.replace(/^[\s]*/, '').replace(/[\s]*$/, '');
}

//
// cookies
//
function getCookie(name) {
    var pairs = document.cookie.split(";");
    for( var i=0; i<pairs.length; i++ ) {
        var arP = pairs[i].split("=");
        arP[0] = trim(arP[0]);
        if( arP[0]==name )
            return unescape(arP[1]).replace('+', ' ');
    }
    return "";
}
//
// return array of all cookies
//
function getCookies() {
    var ar = [];
    var pairs = document.cookie.split(";");
    for( var i=0; i<pairs.length; i++ ) {
        var arP = pairs[i].split("=");
        arP[0] = trim(arP[0]);
        ar[ arP[0] ] = unescape(arP[1]).replace('+', ' ');
    }
    return ar;
}
function $_COOKIES(name) {
    return getCookie(name);
}
function setCookie(cookieName, cookieValue, nDays) {
    var today = new Date();
    var expire = new Date();
    if (nDays==null || nDays==0)
        nDays=1;
    expire.setTime(today.getTime() + 3600000*24*nDays);
    document.cookie = cookieName + "=" + escape(cookieValue) + ";expires=" + expire.toGMTString();
}

//
// this function get url parameters
//
function $_GET( name ) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )
        return "";
    else
        return results[1];
}

/*
 * Periodically trigger a call.
 * iSeconds: interval in seconds (seconds between triggers)
 */
function VIET_vnl_util_Timer(iSeconds) {
    this.thTimer = null;
    this.iInterval = iSeconds==null ? 1 : iSeconds;
    this.arEvents = []
}
VIET_vnl_util_Timer.prototype = {
    Start: function() {
        this.run();
    },

    Stop: function() {
        if( this.thTimer!=null )
            clearTimeout(this.thTimer);
    },

    run: function() {
        for( var i=0, len=this.arEvents.length; i<len; i++ )
            this.arEvents[i].handler(this.arEvents[i].arguments);
        var me = this;
        this.thTimer = setTimeout(function() { me.run() }, this.iInterval*1000);
    },

    //
    // functions that will be called in each interval
    //
    RegisterEvent: function(fnHandler, oArgs) {
        this.arEvents.push( {handler:fnHandler, arguments:oArgs} );
    }
}

//----------------------------------------------------------------------------------------
var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
            || this.searchVersion(navigator.appVersion)
            || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i=0;i<data.length;i++)    {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
    },
    dataBrowser: [
        {     string: navigator.userAgent,
            subString: "OmniWeb",
            versionSearch: "OmniWeb/",
            identity: "OmniWeb"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.vendor,
            subString: "iCab",
            identity: "iCab"
        },
        {
            string: navigator.vendor,
            subString: "KDE",
            identity: "Konqueror"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {
            string: navigator.vendor,
            subString: "Camino",
            identity: "Camino"
        },
        {        // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "Explorer",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        },
        {         // for older Netscapes (4-)
            string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "Windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "Mac"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "Linux"
        }
    ]

};
//BrowserDetect.init();
