// ==SiteScript==
// @siteName    なんとか動画
// @siteUrl     http://nantokadoga.com/
// @author      DarkKnight
// @authorUrl   http://darkknightlabs.com/
// @scriptUrl   http://darkknightlabs.com/site-script/
// @description 
// @date        2008/09/07
// @version     0.7
// ==/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|#34);/ig,    "\"" )
                  .replace( /&(amp|#38);/ig,     "&"  )
                  .replace( /&(apos|#39);/ig,    "'"  )
                  .replace( /&(lt|#60);/ig,      "<"  )
                  .replace( /&(gt|#62);/ig,      ">"  )
                  .replace( /&(nbsp|#160);/ig,   " "  )
                  .replace( /&(frasl|#8260);/ig, "/"  );
    }
}


function base64Decode( str ) {
    var base64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    var result = '';
    var p = -8;
    var a = 0;
    var c;
    
    for ( var i = 0; i < str.length; i++ ) {
        if ( ( c = base64Table.indexOf( str.charAt( i ) ) ) < 0 ) {
            continue;
        }
        
        a = ( a << 6 ) | ( c & 63 );
        
        if ( ( p += 6 ) >= 0 ) {
            var d = ( a >> p ) & 255;
            
            if ( c != 64 ) {
                result += String.fromCharCode( d );
            }
            
            a &= 63;
            p -= 8;
        }
    }
    
    return result;
}


function base64Encode( str ) {
    var base64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    var result = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;
    
    while ( i < str.length ) {
        chr1 = str.charCodeAt( i++ );
        chr2 = str.charCodeAt( i++ );
        chr3 = str.charCodeAt( i++ );
        
        enc1 = chr1 >> 2;
        enc2 = ( ( chr1 &  3 ) << 4 ) | ( chr2 >> 4 );
        enc3 = ( ( chr2 & 15 ) << 2 ) | ( chr3 >> 6 );
        enc4 = chr3 & 63;
        
        if ( isNaN( chr2 ) ) {
            enc3 = enc4 = 64;
        } else if ( isNaN( chr3 ) ) {
            enc4 = 64;
        }
        
        result += base64Table.charAt( enc1 )
                + base64Table.charAt( enc2 )
                + base64Table.charAt( enc3 )
                + base64Table.charAt( enc4 );
        
    }
    
    return result;
}


function isSiteUrl( url ) {
    if ( url.match( /http:\/\/(beta\.)?nantokadoga\.com\/player\.php\?mid=.*/ ) ) {
        return true;
    }
}


function getVideoDetail( url ) {
    var craving = new CravingSiteScript();
    var text = craving.getResponseText( url );
    
    if ( text == null ) {
        return null;
    }
    
    text.match( /<div id="mov_title">(.*?)<\/div>/ );
    var title = RegExp.$1;
    
    text.match( /SWFObject\("\.\/player\.swf\?mid=(.*?)&uid.*&d=(.*?)"/ );
    var movieId = RegExp.$1;
    var movieUrl = base64Decode( RegExp.$2 );
    
    var commentUrl = "http://mes.nantokadoga.com/getcomment_new.php?mid=" + movieId;
    
    text = craving.getResponseText( commentUrl );
    
    if ( text == null ) {
        return null;
    }
    
    text.match( /<documents.*file=".*" ud="(.*?)" ui="(.*?)" fn="(.*?)"/ );
    var theMid = base64Decode( RegExp.$3 );
    var theUrl = '@upload@' + base64Decode( RegExp.$1 ) + '@' + base64Decode( RegExp.$2 ) + '@movie@' + theMid;
    var realUrl = movieUrl + '/getfile.php?ff=' + base64Encode( theUrl );
    
    return { videoTitle0: title, videoUrl0: realUrl };
}
