// ==SiteScript==
// @siteName NhacCuaTui.com
// @siteUrl http://www.nhaccuatui.com/
// @author mayan
// @authorUrl
// @scriptUrl
// @description
// @date 2016/06/30
// @version 0.1.4
// ==/SiteScript==
function CravingSiteScript() {
this._initialize();
}
CravingSiteScript.prototype = {
_xhr: null,
_initialize: function() {},
_getXmlHttpRequest: function() {
if ( this._xhr != null ) {
return this._xhr;
}
var xhr = null;
var these = [
function() { return new XMLHttpRequest(); }
, function() { return new ActiveXObject( "Msxml2.XMLHTTP" ); }
, function() { return new ActiveXObject( "Microsoft.XMLHTTP" ); }
, function() { return new ActiveXObject( "Msxml2.XMLHTTP.4.0" ); }
];
for ( var i = 0, length = these.length; i < length; i++ ) {
var func = these[ i ];
try {
xhr = func();
break;
}
catch( e ) {}
}
this._xhr = xhr;
return this._xhr;
},
_load: function( url, data, method ) {
var req = this._getXmlHttpRequest();
var mtd = ( method == null ) ? "GET" : "POST";
req.open( mtd, url, false );
if ( mtd == "POST" ) {
req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
}
req.send( data );
return req.responseText;
},
getResponseText: function( url, data, method ) {
return this._load( url, data, method );
},
getResponseJSON: function( url, data, method ) {
var text = this._load( url, data, method );
return eval( "("+text+")" );
},
/// Math
random: function( limit ) {
return Math.floor( Math.random() * limit );
},
/// String
decodeHtml: function( str ) {
return str.replace( /&(quot|#0*34);/ig, "\"" )
.replace( /&(amp|#0*38);/ig, "&" )
.replace( /&(apos|#0*39);/ig, "'" )
.replace( /&(lt|#0*60);/ig, "<" )
.replace( /&(gt|#0*62);/ig, ">" )
.replace( /&(nbsp|#0*160);/ig, " " )
.replace( /&(frasl|#8260);/ig, "/" );
}
}
var _NhacTui = {};
_NhacTui.priorDownloadLink = false;
function isSiteUrl( url ) {
if ( url.match( /http:\/\/(?:www\.)?nhaccuatui\.com\/(bai-hat|playlist|video|mv)\/[^\/?]*\.[0-9a-zA-Z]+\.html/ ) ) return true;
if ( url.match( /http:\/\/(?:www\.)?nhaccuatui\.com\/(bai-hat|playlist|video|mv)\/[0-9a-zA-Z]+(?:[?#].*)?$/ ) ) return true;
//old, single, list
if ( url.match( /http:\/\/(www\.)?nhaccuatui\.com\/nghe(\?.+)/ )
&& RegExp.$2.match( /[?&](M|L)=[0-9a-zA-Z]+/ ) ) return true;
//old, mv
if ( url.match( /http:\/\/(www\.)?nhaccuatui\.com\/mv4u\/xem-clip\/[0-9a-zA-Z]+\/[^?]+?\.html/ ) ) return true;
//embed
if ( url.match( /http:\/\/(www\.)?nhaccuatui\.com\/(l|m|(?:mv|video)\/xem-clip)\/[0-9a-zA-Z]+/ ) ) return true;
return false;
}
function getVideoDetail( url ) {
var BASE = "http://www.nhaccuatui.com/";
url = url.replace( /http:\/\/nhaccuatui\.com\//, "http://www.nhaccuatui.com/" );
url = url.replace( /http:\/\/(www\.)?nhaccuatui\.com\/mv\//, "http://www.nhaccuatui.com/video/" );
if ( url.match( /http:\/\/www\.nhaccuatui\.com\/(bai-hat|playlist|video|mv)\/[^\/?]*\.([0-9a-zA-Z]+)\.html/ ) ||
url.match( /http:\/\/www\.nhaccuatui\.com\/(bai-hat|playlist|video|mv)\/([0-9a-zA-Z]+)(?:[?#].*)?$/ ) ) {
var vid = RegExp.$2;
var pageurl = url;
if ( RegExp.$1 == "bai-hat" ) var embedurl = BASE + "m/" + vid;
else if ( RegExp.$1 == "playlist" ) embedurl = BASE + "l/" + vid;
else if ( RegExp.$1 == "video" || RegExp.$1 == "mv" ) embedurl = BASE + "video/xem-clip/" + vid;
else embedurl = "";
} else if ( url.match( /http:\/\/www\.nhaccuatui\.com\/nghe(\?.+)/ )
&& RegExp.$1.match( /[?&](M|L)=([0-9a-zA-Z]+)/ ) ) { //old, single, list
vid = RegExp.$2;
pageurl = url;
if ( RegExp.$1 == "M" ) embedurl = BASE + "m/" + vid;
else if ( RegExp.$1 == "L" ) embedurl = BASE + "l/" + vid;
else embedurl = "";
} else if ( url.match( /http:\/\/www\.nhaccuatui\.com\/mv4u\/xem-clip\/([0-9a-zA-Z]+)\/[^?]+?\.html/ ) ) { //old, pv
vid = RegExp.$1;
pageurl = url;
embedurl = BASE + "video/xem-clip/" + vid;
} else if ( url.match( /http:\/\/www\.nhaccuatui\.com\/(l|m|(?:mv|video)\/xem-clip)\/([0-9a-zA-Z]+)/ ) ) {
vid = RegExp.$2;
embedurl = url;
if ( RegExp.$1 == "m" ) pageurl = BASE + "bai-hat/dummy." + vid + ".html";
else if ( RegExp.$1 == "l" ) pageurl = BASE + "playlist/dummy." + vid + ".html";
else if ( RegExp.$1 == "mv/xem-clip" || RegExp.$1 == "video/xem-clip" ) pageurl = BASE + "video/dummy." + vid + ".html";
} else {
//return null;
pageurl = url;
}
var craving = new CravingSiteScript();
if ( embedurl ) {
try {
var objHttp = new ActiveXObject( "WinHttp.WinHttpRequest.5.1" );
objHttp.open( "HEAD", embedurl, false );
objHttp.send();
var rd = objHttp.option( 1 );
} catch( e ) {
rd = "";
}
if ( rd.match( /[?&]file=([^&]+)/ ) ) var xmlurl = decodeURIComponent( RegExp.$1 );
}
if ( !xmlurl && pageurl ) {
try {
var text = craving.getResponseText( pageurl );
} catch( e ) {
text = "";
}
if ( text ) {
if ( !xmlurl &&
text.match( /]*?itemprop\s*=\s*("|')?embedURL\2[^>]*)>/im )
&& RegExp.$1.match( /\s+content\s*=\s*("|')(.*?)\1/i )
&& RegExp.$2.match( /[?&]file=([^&]+)/i ) ) {
xmlurl = RegExp.$1;
}
if ( !xmlurl &&
text.match( /player\.peConfig\.xmlURL\s*=\s*("|')(.*?)\1\s*;/m ) ) {
xmlurl = RegExp.$2;
}
if ( !xmlurl &&
text.match( /]*?name\s*=\s*("|')flashvars\2[^>]*)>/im )
&& RegExp.$1.match( /\s+value\s*=\s*("|')(.*?)\1/i )
&& ("&"+RegExp.$2).match( /&(?:amp;)file=([^&]+)/ ) ) {
xmlurl = RegExp.$1;
}
if ( !xmlurl &&
text.match( /