﻿
if( typeof AAS == "undefined" )
{
    AAS = new Object();
}

/**
 *  @class
 *  URL制御関数
 */
AAS.Url = new Object();

/**
 *  指定したWindowオブジェクトからURLクエリーオブジェクトを生成する
 *
 *  @params {Window}    Windowオブジェクト
 *
 *  @return URLクエリーオブジェクト
 *  @type   AAS.Url.Query
 */
AAS.Url.createQueryFromWindow = function( wnd )
{
    return AAS.Url.createQueryFromString( wnd.location.search.substring( 1 ) );
}

/**
 *  指定したURLパラメータ文字列からURLクエリーオブジェクトを生成する
 *
 *  @param  {String}    str URLパラメータ文字列（"name(1)=value(1)&･･･&name(n)=value(n)" 形式）
 *
 *  @return URLクエリーオブジェクト
 *  @type   AAS.Url.Query
 */
AAS.Url.createQueryFromString = function( str )
{
    return new AAS.Url.Query( str );
}


/**
 * HTTPSアクセスの場合、HTTPへ移動する
 **/
AAS.Url.transferHttp = function( wnd ) {
    if( !wnd ) wnd = window;
    var url = wnd.location.href;
    if( url.substr( 0 , 6 ) == "https:"  ) {
        wnd.location.href = url.replace(/^https:/,"http:");
    }
}

/**
 * HTTPアクセスの場合、HTTPSへ移動する
 **/
AAS.Url.transferHttps = function( wnd ) {
    if( !wnd ) wnd = window;
    var url = wnd.location.href;
    if( url.substr( 0 , 5 ) == "http:" ) {
        wnd.location.href = url.replace(/^http:/,"https:");
    }
}

/**
 *  @class
 *  URLクエリーオブジェクト
 */
AAS.Url.Query = Class.create();

AAS.Url.Query.prototype =
{
    /**
     *  パラメータハッシュ（キー：パラメータ名、値：パラメータ値）
     *
     *  @type   Object
     */
    params: null,
    
    /**
     *  @constructor
     *
     *  @param  {String}    str URLパラメータ文字列（"name(1)=value(1)&･･･&name(n)=value(n)" 形式）
     */
    initialize: function( str )
    {
        this.params = this._fromString( str );
    },
    
    /**
     *  @private
     *  URLパラメータ文字列をパラメータハッシュに変換する
     *
     *  @param  {String}    str URLパラメータ文字列（"name(1)=value(1)&･･･&name(n)=value(n)" 形式）
     *
     *  @return パラメータハッシュ
     *  @type   Object
     */
    _fromString: function( str )
    {
        var params  = new Object();
        var vars    = str.split( "&" );
        var pair;
        
        if( ( vars.length > 1 ) || ( vars[0] != "" ) )
        {
            for( var i = 0; i < vars.length; i++ )
            {
                pair = vars[i].split( "=" );
                params[pair[0]] = pair[1];
            }
        }
        
        return params;
    },
    
    /**
     *  指定したパラメータ名の値を取得する
     *
     *  @param  {String}    name            パラメータ名
     *  @param  {String}    defaultValue    指定したパラメータが存在しない場合のデフォルト値
     *
     *  @return パラメータ値
     *  @type   String
     */
    getParam: function( name, defaultValue )
    {
        var param = this.params[name];
        
        if( !defaultValue )
        {
            defaultValue = "";
        }
        
        if( !param )
        {
            param = defaultValue;
        }
        
        return param;
    },
    
    /**
     *  パラメータ文字列を取得する
     *
     *  @return パラメータ文字列（"name(1)=value(1)&･･･&name(n)=value(n)" 形式）
     *  @type   String
     */
    toString: function()
    {
        var ret     = "";
        var params  = this.params;
        var param;
        
        for( param in params )
        {
            if( ret != "" )
            {
                ret += "&";
            }
            
            ret += param + "=" + params[param];
        }
        
        return ret;
    }
}
