// ==SiteScript==
// @siteName    AmebaVision
// @siteUrl     http://vision.ameba.jp/
// @author      DarkKnight
// @authorUrl   http://darkknightlabs.com/
// @scriptUrl   http://darkknightlabs.com/site-script/
// @description 
// @date        2008/09/09
// @version     0.3
// ==/SiteScript==


function CravingSiteScript( uri ) {
    this._initialize( uri );
}


CravingSiteScript.prototype = {
    _uri: null,
    
    _initialize: function( uri ) {
        if ( !uri ) {
            return;
        }
        this._uri = uri;
    },
    
    _getXmlHttpRequest: function() {
        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 ) {}
        }
        
        return xhr;
    },
    
    _load: function() {
        var req = this._getXmlHttpRequest();
        
        req.open( "GET", this._uri, false );
        req.send();
        
        return req.responseText;
    },
    
    getResponseText: function() {
        return this._load();
    },
    
    getResponseJSON: function() {
        var text = this._load();
        
        return eval( "("+text+")" );
    }
}


function isSiteUrl( url ) {
    if ( url.match( /http:\/\/vision\.ameba\.jp\/watch\.do\?movie=\d+/ ) ) {
        return true;
    }
}


function getVideoDetail( url ) {
    var craving = new CravingSiteScript( url );
    var text = craving.getResponseText();
    
    if ( text == null ) {
        return null;
    }
    
    text.match( /<h2>(.*)<\/h2>/ );
    var title = RegExp.$1;
    
    text.match( /src="http:\/\/([^\/]+)\/mcj\.php\?id=(.+)"/ );
    var videoDomain = RegExp.$1;
    var videoId = RegExp.$2;
    
    var table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./_";
    var key = "FabricaCommunications.CO.LTD.";
    
    key = videoId.charAt( 0 ) + key;
    videoId = videoId.substring( 1 );
    var result = "";
    
    for ( var i = 0; i < videoId.length; i++ ) {
        var char = videoId.charAt( i );
        var index = table.indexOf( char );
        
        if ( index >= 0 ) {
            index -= table.indexOf( key.charAt( i % key.length ) );
            if ( index < 0 ) {
                index += table.length;
            }
            if ( index >= table.length ) {
                index -= table.length;
            }
            char = table.charAt( index );
        }
        result += char;
    }
    
    var realUrl;
    
    if ( result.match( /:([0-9]+):([0-9]+):([0-9]+):(.+\.flv)/ ) != null ) {
        realUrl = "http://" + videoDomain + "/flv/" + RegExp.$1 + "/" + RegExp.$2 + "/"  + RegExp.$3 + "/"  + RegExp.$4;
    }
    else if ( result.match( /:([0-9]+):([0-9]+):(.+\.flv)/ ) != null ) {
        realUrl = "http://" + videoDomain + "/flv/" + RegExp.$1 + "/" + RegExp.$2 + "/"  + RegExp.$3;
    }
    else {
        return null;
    }
    
    return { videoTitle0: title, videoUrl0: realUrl };
}
