
function _log( mess ) {
    if ( ! window.console ) return;
    if ( ! console.log ) return;
//  console.log( mess );
}

// オブジェクトからクエリー文字列を生成する関数
function obj2query ( obj ) {
    var list = [];
    for( var key in obj ) {
        var k = encodeURIComponent(key);
        var v = encodeURIComponent(obj[key]);
        list[list.length] = k+'='+v;
    }
    var query = list.join( '&' );
    return query;
}

// グローバル名前空間にコールバック関数を設置する
var cbnum = 1;
function gen_callback ( func ) {
    var name = 'callback_'+cbnum;
    window[name] = func;
    cbnum ++;
    return name;
}

// 現在の表示内容をクリアする
function remove_children ( id ) {
    var div = ( typeof id == 'String' ) ? document.getElementById( id ) : id;
    while ( div.firstChild ) { 
        div.removeChild( div.lastChild );
    }
};

function clearHTML ( self ) {
    var here = self._htmlLayer;
    remove_children( here );
}

// マーカーファイル名を抽出する
function conf_get_markers ( conf ) {
    var list = [];
    for( var i=0; i<conf.length; i++ ) {
        var hash = conf[i];
        if ( ! hash.marker ) continue;
        list.push( hash.marker );
    }
    _log( 'conf_get_markers: list='+list.length );
    return list;
}


function get_array_min ( v, key ) {
    var min = v[0][key];
    for( var i=1; i<v.length; i++ ) {
        if ( min > v[i][key] ) min = v[i][key];
    }
    return min;
}

function get_array_max ( v, key ) {
    var max = v[0][key];
    for( var i=1; i<v.length; i++ ) {
        if ( max < v[i][key] ) max = v[i][key];
    }
    return max;
}

function disp_photo ( v, url, zoom ) {
    var img = document.createElement( 'img' );
    img.src = url;
    set_image_style( v, img, zoom );
    var here = jsar._htmlLayer;
    here.appendChild( img );
	return img;
}

function get_max_3 ( a, b, c ) {
    if ( a < b ) a = b;
    if ( a < c ) a = c;
    return a;
}

function get_max_4 ( a, b, c, d ) {
    if ( a < b ) a = b;
    if ( a < c ) a = c;
    if ( a < d ) a = d;
    return a;
}

function get_min_3 ( a, b, c ) {
    if ( a > b ) a = b;
    if ( a > c ) a = c;
    return a;
}

function get_footage ( v ) {
    var minx1 = get_min_3( v[0].x, v[1].x, v[2].x );
    var miny1 = get_min_3( v[0].y, v[1].y, v[2].y );
    var maxx1 = get_max_3( v[0].x, v[1].x, v[2].x );
    var maxy1 = get_max_3( v[0].y, v[1].y, v[2].y );
    var foot1 = ( maxx1 - minx1 ) * ( maxy1 - miny1 ) / 2;

    var minx2 = get_min_3( v[2].x, v[3].x, v[0].x );
    var miny2 = get_min_3( v[2].y, v[3].y, v[0].y );
    var maxx2 = get_max_3( v[2].x, v[3].x, v[0].x );
    var maxy2 = get_max_3( v[2].y, v[3].y, v[0].y );
    var foot2 = ( maxx2 - minx2 ) * ( maxy2 - miny2 ) / 2;

    return Math.floor( foot1 + foot2 );
}


function get_side ( p, q ) {
	var x = Math.abs(p.x - q.x);
	var y = Math.abs(p.y - q.y);
	return x * x + y * y;
}

function get_long_side  ( v ) {
	var side1 = get_side( v[0], v[1] );
	var side2 = get_side( v[1], v[2] );
	var side3 = get_side( v[2], v[3] );
	var side4 = get_side( v[3], v[0] );
	var lsize = get_max_4( side1, side2, side3, side4 );

    return lsize;
}

function set_image_style ( v, img, zoom ) {
    img.style.position = 'absolute';

    var cx = Math.floor(( v[0].x + v[1].x + v[2].x + v[3].x ) / 4);
    var cy = Math.floor(( v[0].y + v[1].y + v[2].y + v[3].y ) / 4);

    var minx = get_array_min( v, 'x' );
    var miny = get_array_min( v, 'y' );
    var maxx = get_array_max( v, 'x' );
    var maxy = get_array_max( v, 'y' );

	var size, x, y, w;
	if ( zoom ) {
	    size = ( maxx - minx ) * zoom;
	    x = ( maxx + minx - size ) / 2.0;
	    y = ( maxy + miny - size ) / 2.0;
	    w = size;
	} else {
	    size = maxx - minx;
	    x = minx;
	    y = maxy - size;
	    w = size;
	}

    img.style.left   = Math.floor(x)+'px';
    img.style.top    = Math.floor(y)+'px';
    img.style.width  = Math.floor(w)+'px';
// 	img.style.height = Math.floor(h)+'px';
    _log( 'set_image_style: x='+x+' y='+y+' w='+w );

//  var order = get_footage( v );
    var order = get_long_side( v );
    img.style.zIndex = order;       // big = front, small = back

    return w;
}

