function bulidArray(sPos, ePos) {
    var a = new Array(); var n = 0; for(i=sPos;i<=ePos;i++) { a[n] = i; n++;}
    return a;
}

function cycAvatarConfig(item)
{
    var body = new Array();
    body['v0'] = bulidArray(1, 22);
    body['v1'] = bulidArray(44, 69);//把聖誕節服裝重入
    body[2] = -53; //top

    var head = new Array();
    head['v0'] = bulidArray(1, 4);
    head['v1'] = bulidArray(1, 4);
    head[2] = 0; //top

    var face = new Array();
    face['v0'] = bulidArray(1, 11);
    face['v1'] = bulidArray(12, 33);//把聖誕節服裝重入
    face[2] = 0; //top 

    var hair_front = new Array();
    hair_front['v0'] = bulidArray(1, 20);
    hair_front['v1'] = bulidArray(43, 68);//把聖誕節服裝重入
    hair_front[2] = 0; //top     
    
    var hair_back = hair_front;
    
    var ornament = new Array();
    ornament['v0'] = bulidArray(0);
    ornament['v1'] = new Array(1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);//把聖誕節服裝重入
    //ornament['v1'] = bulidArray(15, 21);
    ornament[2] = -32; //top     

    return eval(item);   
}


var DB_AVATAR = new Array();
function DB_avatar_set(layer, srcName)
{
    DB_AVATAR[layer] = srcName;
}

function DB_avatar_sel(layer)
{
    return _decTo3822(DB_AVATAR[item]);    
}


function count(data)
{
    var i = 0;
    for(n in data)
    {
        i++;    
    }
    return i;
}


function DB_avatar_get()
{
    var tmp = new Array();
//    if (count(DB_AVATAR) == 7)
    {
        tmp[0] = _decTo3822(DB_AVATAR['scene']);
        tmp[1] = _decTo3822(DB_AVATAR['hair_front']);
        tmp[2] = _decTo3822(DB_AVATAR['face']);
        tmp[3] = _decTo3822(DB_AVATAR['head']);
        tmp[4] = _decTo3822(DB_AVATAR['body']);        
        tmp[5] = _decTo3822(DB_AVATAR['ornament']);
    }
    return tmp.join('')
}



var mainLayer = 'cycAvatar';
var layerName = 'cycLayer';
var layerNum = 7;
// 產生 HeapMap
var tmp = new Array();
var imageDir = 'images/avatar';
tmp['hair_front']= 7;
tmp['face'] = 6;
tmp['head'] = 5;
tmp['ornament']= 4;
tmp['body'] = 3;
tmp['hair_back'] = 2;

var avatarHeapMap = tmp;
tmp = null;

var setAvatar = new Array();
function cycAvatar_paint() {
    var frame = new Array();
                
    for(i=1;i<=layerNum;i++){
        zIndex = i;
        show = (setAvatar[i]) ? "visibility: visible" : "visibility: hidden" ;
        frame[i] = '<div id="'+mainLayer+'_'+i+'" style="position:absolute; width:62px; height:69px; z-index:'+zIndex+'; '+show+'">';
	imageName = (setAvatar[i]) ? setAvatar[i]: "";//解決setAvatar[i]初始值等於undefined的問題
        frame[i]+= '<img id="'+layerName+'_'+i+'" src="'+imageName+'" width="62" height="120">';
        frame[i]+= '</div>';
    }

    strFrame = frame.join('');
    mainFrame = '<div id="cycAvatar" style="position:relative; width:62px; height:120px; z-index:10;">'+strFrame+'</div>';
    document.write(mainFrame);
}

function cycAvatar_phpbb(data, w ,h)
{
	if (!w) w = 62;
	if (!h) h = 120;

    if (data.length == 11) data = '0'+data;
    var c = null, tmp =null; n = new Array(); db = new Array();
    c = data.split('');
    if (c.length == 12)
    {
        db = data2avatar(data);        

        var frame = '';

        for(layer in avatarHeapMap) {
            if(typeof avatarHeapMap[layer] == 'function') continue;
            zIndex = avatarHeapMap[layer];
            nsrcName = db[layer];
            if (db[layer] < 10) nsrcName = '0'+db[layer];
            objsrc = imageDir+'/'+layer+'/'+layer+'_'+nsrcName+'.gif';
            show = (nsrcName) ? "visibility: visible" : "visibility: hidden" ;
            frame+= '<div style="position:absolute; width:62px; height:69px; z-index:'+zIndex+'; '+show+'">';
            frame+= '<img src="'+objsrc+'" width="62" height="120">';
            frame+= '</div>';
        }
    
        mainFrame = '<div style="position:relative; width:'+w+'px; height:'+h+'px; z-index:10; overflow: hidden; clip: rect(auto 0 0 auto);">'+frame+'</div>';
        document.write(mainFrame);
    }    
}

function cycAvatar_set() {
    var a= cycAvatar_set.arguments;
    var layer = a[0];
    var layerNo = avatarHeapMap[layer];
    var srcName = Math.abs(a[1])
    var obj = document.getElementById(layerName+'_'+layerNo);
    var objL = document.getElementById(mainLayer+'_'+layerNo);
    if (srcName) {
        nsrcName = srcName;
        if (srcName < 10) nsrcName = '0'+srcName;
        obj.src = imageDir+'/'+layer+'/'+layer+'_'+nsrcName+'.gif';
        objL.style.visibility = "visible";
    } else {
        objL.style.visibility = "hidden";
    }
    DB_avatar_set(layer, srcName);
    if (layer == 'hair_front') cycAvatar_set('hair_back', srcName);
}

function cycAvatar_rand()
{   
    DB_avatar_set('scene', 10);
    
    var hair_front = cycAvatarConfig('hair_front');
    hair_front = hair_front['v1'];
    hair_front_no = parseInt(Math.random()*hair_front.length)
    cycAvatar_set('hair_front', hair_front[hair_front_no]);
    var face = cycAvatarConfig('face'); 
    face = face['v1'];
    face_no = parseInt(Math.random()*face.length)    
    cycAvatar_set('face', face[face_no]);
    var head = cycAvatarConfig('head'); 
    head = head['v1'];
    head_no = parseInt(Math.random()*head.length)    
    cycAvatar_set('head', head[head_no]);    
    var body = cycAvatarConfig('body');  
    body = body['v1'];
    body_no = parseInt(Math.random()*body.length)    
    cycAvatar_set('body', body[body_no]);     
    var ornament = cycAvatarConfig('ornament');
    ornament = ornament['v1'];    
    ornament_no = parseInt(Math.random()*ornament.length)    
    cycAvatar_set('ornament', ornament[ornament_no]);    
}

function cycAvatar_reset(data)
{
    if (data.length == 11) data = '0'+data;
    var c = null, tmp =null; n = new Array();
    c = data.split('');
    if (c.length == 12)
    {
        for(i=0;i<c.length/2;i++)
        {
            iPos = i*2;
            tmp = c[iPos]+''+c[iPos+1]
            n[i] = _3822ToDec(tmp)
        }
        DB_avatar_set('scene', n[0])
    	cycAvatar_set('hair_front', n[1]);
    	cycAvatar_set('face', n[2]);
    	cycAvatar_set('head', n[3]);
    	cycAvatar_set('body', n[4]);    
    	cycAvatar_set('ornament', n[5]);
    }
}

function _62ToDec(bit)
{
    var asc = bit.charCodeAt(0);
    if (asc > 47 && asc< 58)       return asc - 48;
	else if (asc > 64 && asc < 91)  return asc - 55;
	else if (asc > 96 && asc < 123) return asc - 61;
	return null;
}

function _decTo62(bit)
{
	var heap = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
	heap = heap.split('');
	return heap[bit];
}

function _3822ToDec(twoBit)
{
    var sR=null,i1=null,i2=null;
    var twoBit = twoBit.split('');
    if (twoBit.length == 2) i1 = _62ToDec(twoBit[0]);
    if (i1 != null) sR = i1 * 62;
    if (sR != null) i2 = _62ToDec(twoBit[1]);
    if (i2 != null) return sR + i2;
}

function _decTo3822(iNum)
{
    if (iNum >= 0 && iNum <= 3844)
    {
        i1 = iNum / 62; i1 =  parseInt(i1);
        i2 = iNum % 62;
        return _decTo62(i1)+''+_decTo62(i2);
    }
}


function cycAvatar_selectPaint()
{
    var a= cycAvatar_selectPaint.arguments;
    var layer = a[0];
    var ver = a[1];
    var cfg = cycAvatarConfig(layer);
    var cfgHead = cycAvatarConfig('head');
    var cfgHair_back = cycAvatarConfig('hair_back');

    var layerStart = cfg[ver][0];
    var layerLen = cfg[ver].length;
    var layerEnd = cfg[ver][layerLen-1];

    var lPos = 0;
    var ncfg = null;
    for(i=0;i<cfg[ver].length;i++) 
    {   

        n = cfg[ver][i];
        nm = n;
        if (n < 10) nm = '0'+n;
        img = '<img src="'+imageDir+'/'+layer+'/'+layer+'_'+nm+'.gif" width="62" height="120" onClick="change_new(this)">';
        div = '<div id="Layer_'+layer+'_'+n+'" style="position:absolute; left:'+lPos+'; top:'+cfg[2]+'; width:62px; height:120px; z-index:'+avatarHeapMap[layer]+';visibility:hidden" onMouseOver="showF(this)" onMouseOut="hiddF(this)">'+img+'</div>';
        if (layer == 'hair_front')
        {
            layerOther  = 'hair_back';
            img = '<img src="'+imageDir+'/'+layerOther+'/'+layerOther+'_'+nm+'.gif" width="62" height="120" onClick="change(this)">';
            div += '<div id="Layer_'+layerOther+'_'+n+'" style="position:absolute; left:'+lPos+'; top:'+cfgHair_back[2]+'; width:62px; height:120px; z-index:'+avatarHeapMap[layerOther]+';visibility:visible" onMouseOver="showF(this)" onMouseOut="hiddF(this)">'+img+'</div>';
        }

        if (layer == 'hair_front' || layer == 'face')
        {
            layerOther  = 'head';
            head = '01';
            img = '<img src="'+imageDir+'/'+layerOther+'/'+layerOther+'_'+head+'.gif" width="62" height="120">';
            layerOName = layer+'_'+layerOther;
            div += '<div id="Layer_'+layerOName+'_'+n+'" style="position:absolute; left:'+lPos+'; top:'+cfgHead[2]+'; width:62px; height:120px; z-index:'+avatarHeapMap[layerOther]+';visibility:visible">'+img+'</div>';
        }

        
        layerOther  = 'scene';
        scene = '10';
        img = '<img src="'+imageDir+'/'+layerOther+'/'+layerOther+'_'+scene+'.gif" width="62" height="120">';
        layerOName = layer+'_'+layerOther;
        div += '<div id="Layer_'+layerOName+'_'+n+'" style="position:absolute; left:'+lPos+'; top:'+cfgHead[2]+'; width:62px; height:120px; z-index:1;visibility:visible">'+img+'</div>';
        
        document.writeln(div);
        lPos += 62;
    }   

    for(i=0;i<cfg[ver].length;i++) 
    {
        n = cfg[ver][i];

        try
        {
            tmpObj = document.getElementById('Layer_'+layer+'_'+n).style;
            tmpObj.visibility = "visible";            
        }
        catch(e)
        {
            //alert(layer+'-'+n);            
        }
        

        if (layer == 'hair_front')
        {
            layerOther  = 'hair_back';            
            tmpObj = document.getElementById('Layer_'+layerOther+'_'+n).style;
            tmpObj.visibility = "visible";
        }
    }
}


function cycChar_selectPaint()
{
	var tr = '';
	for(i=0;i<=3;i++)
	{
		td = '';
		for(j=1;j<=12;j++)
		{
			no = i*12 + j;
			td +='<td><input type="radio" name="char" value="'+no+'"><br>';
			no = (no < 10) ? '0'+no : no;
			td += '<img src="images/f'+no+'.gif" width="30" height="28"></td>';
		}	
		tr += '<tr valign="middle" align="center">'+td+'</tr>';
	}
	document.write(tr);
}
function change_new(obj)
{
      var d = obj.src;
	d = d.split('/');
	var images = d[d.length-1];
	var i = images.split('.');
	var item = new Array();
	if (i.length >= 2)
	{
		var name = i[0];
		n = name.split('_');

		for(y=0;y<n.length-1;y++)
		{
		    item[y] = n[y];

        }
        layer = item.join('_');
	    cycAvatar_set(layer, n[n.length-1]);
	}
}
function change(obj)
{
	var d = obj.src;
	d = d.split('/');
	var images = d[d.length-1];
	var i = images.split('.');	
	var item = new Array();
	if (i.length >= 2)
	{
		var name = i[0];
		n = name.split('_');

		for(y=0;y<n.length-1;y++)
		{
		    item[y] = n[y];
		
        }
        layer = item.join('_');
	    cycAvatar_set(layer, n[n.length-1]);
	}
}

function back(item, flag, ver)
{
    var cfg = cycAvatarConfig(item);
    var layerStart = cfg[ver][0];
    var layerLen = cfg[ver].length;

    var layerEnd = cfg[ver][layerLen-1];

	var num = layerEnd;
    // 確認第一個的位置
    var obj = document.getElementById('Layer_'+item+'_'+layerStart);
    if (typeof(obj) == 'undefined') return false;
    var pos = 0;
    if (flag)
    {
        if (parseInt(document.getElementById('Layer_'+item+'_'+num).style.left) < 372) return false;    
        pos = -62;
    }
    else
    {
        if (parseInt(obj.style.left) >= 0) return false;
        pos = 62;
    }

    for(i=0;i<cfg[ver].length;i++) 
    {
        n = cfg[ver][i];
        tmpObj = document.getElementById('Layer_'+item+'_'+n).style;
	    tmpObj.top =  parseInt(tmpObj.top);        
	    tmpObj.left = parseInt(tmpObj.left) + pos;
        tmpObj.visibility = "visible";
    }

    if (item == 'hair_front') back('hair_back', flag, ver);    
}

function hiddF(obj)
{
    var objf = document.getElementById('focusLayer');
    objf.style.visibility = "hidden";
}

function showF(obj)
{
    var tmp = new Array();
    var id = obj.id;
    id = id.split('_');
    for(i=0;i<id.length-1;i++)
    {
        tmp[i] = id[i];
    }
    name = tmp.join('_');
	var offsetTop = document.getElementById(name).offsetTop;
	var offsetLeft = document.getElementById(name).offsetLeft;
	var objf = document.getElementById('focusLayer');
	objf.style.left = parseInt(obj.style.left) + offsetLeft;
	objf.style.top =  offsetTop;
    objf.style.visibility = "visible";
}

function _62ToDec(data)
{
    var asc = data.charCodeAt(0);
    if (asc > 47 && asc< 58)       return asc - 48;
	else if (asc > 64 && asc < 91)  return asc - 55;
	else if (asc > 96 && asc < 123) return asc - 61;
	return null;
}

function _decTo62(bit)
{
	var heap = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
	heap = heap.split('');
	return heap[bit];
}

var cfgStar = new Array('牡羊座','金牛座','雙子座','巨蟹座','獅子座','處女座','天秤座','天蠍座','射手座','摩羯座','水瓶座','雙魚座' );
var cfgJob = new Array("","農林漁牧礦業","製造業-不含資訊業","資訊工業","資訊服務業","營造業","商業","運輸業"
,"通信業","金融保險不動產業","社會服務業","大眾傳播/廣告業","個人服務業","工商服務業"
,"公務人員","軍人","大專教師","中小學教師","家管","學生","退休","待業中","其他");
cfgJob[99] = "其他";
// 生日轉星座
function birthday2Star(data) {
    var sFlag  = 0; 
    if (typeof(data) != "undefined") {
        var da = data.split('-');
        if (da[1] == 1) { sFlag = (da[2] <= 19) ? 9 : 10
        } else if (da[1] == 2) { sFlag = (da[2] <= 19) ? 10 : 11
        } else if (da[1] == 3) { sFlag = (da[2] <= 20) ? 11 : 0
        } else if (da[1] == 4) { sFlag = (da[2] <= 20) ? 0 : 1
        } else if (da[1] == 5) { sFlag = (da[2] <= 20) ? 1 : 2
        } else if (da[1] == 6) { sFlag = (da[2] <= 21) ? 2 : 3
        } else if (da[1] == 7) { sFlag = (da[2] <= 22) ? 3 : 4
        } else if (da[1] == 8) { sFlag = (da[2] <= 22) ? 4 : 5
        } else if (da[1] == 9) { sFlag = (da[2] <= 22) ? 5 : 6
        } else if (da[1] == 10) { sFlag = (da[2] <= 22) ? 6 : 7
        } else if (da[1] == 11) { sFlag = (da[2] <= 21) ? 7 : 8
        } else if (da[1] == 12) { sFlag = (da[2] <= 21) ? 8 : 9
        }       
    }
    return cfgStar[sFlag];
}


function data2avatar(data)
{
    if (data.length == 11) data = '0'+data;
    var c = null, tmp =null; n = new Array();
    c = data.split('');
    if (c.length == 12)
    {
        for(i=0;i<c.length/2;i++)
        {
            iPos = i*2;
            tmp = c[iPos]+''+c[iPos+1]
            n[i] = _3822ToDec(tmp)
        }
		var cyc = new Array();
		cyc['hair_front'] = n[1];
		cyc['face'] = n[2];
		cyc['head'] = n[3];
		cyc['body'] = n[4];								
		cyc['ornament'] = n[5];
		cyc['hair_back'] = n[1];
    }
    return cyc;
}

function cycAvatar_html(data)
{
	var noImg = false;
	if (!data)
	{
		noImg = true;
		noImgLayer = 'ornament';
		data = '0A0101010101';
	}
    cyc = data2avatar(data);
    var strFrame = '';
	for(layer in cyc) {  
	
	    srcName = Math.abs(cyc[layer])	 
        nsrcName = srcName;
        if (srcName < 10) nsrcName = '0'+srcName;	
        objsrc = imageDir+'/'+layer+'/'+layer+'_'+nsrcName+'.gif';
        if (noImg) objsrc = imageDir+'/'+noImgLayer+'/'+noImgLayer+'_'+nsrcName+'.gif';
        frame = '<div id="'+mainLayer+'_'+layer+'" style="position:absolute; width:62px; height:69px; z-index:'+avatarHeapMap[layer]+'; visibility: visible">';
        frame += '<img id="'+layerName+'_'+layer+'" src="'+objsrc+'" width="62" height="120">';
        frame += '</div>';
        strFrame += frame;
    }

    mainFrame = '<div id="cycAvatar" style="position:relative; width:62px; height:120px; z-index:10;">'+strFrame+'</div>';
	return mainFrame;	
}

function cycAvatar_Html_reset(obj, data)
{
    if (typeof(obj) != 'undefined')
    {
        var cyc = new Array();
        cyc = data2avatar(data);
    	for(layer in cyc) {
    	    srcName = Math.abs(cyc[layer])	 
            nsrcName = srcName;
            if (srcName < 10) nsrcName = '0'+srcName;	
            objsrc = imageDir+'/'+layer+'/'+layer+'_'+nsrcName+'.gif';
            if (typeof(obj[layerName+'_'+layer]) != 'undefined')
            {
                obj[layerName+'_'+layer].src = objsrc;    
            }
        }              
    }
}

function setImageRoot(url)
{
    imageDir = url + imageDir;
}

function cycAvatarMini_html(data, size)
{
    var a = cycAvatarMini_html.arguments;  
	var noImg = false;
	var data = a[0];
	var size = a[1];
	if (!data)
	{
		noImg = true;
		noImgLayer = 'ornament';
		data = '0A0101010101';
	}
	if (!size)
	{
        size = 1;	        
    }
    cyc = data2avatar(data);
    var strFrame = '';
    var hlayer = new Array();
    for(layer in cyc) {	
        if (layer == 'hair_front' ||
            layer == 'face' ||
            layer == 'head' ||
            layer == 'hair_back')
        {
            hlayer[layer] = cyc[layer] 
        }
    }        
    var iWidth = Math.abs(62 * size);
    var height = Math.abs(120 * size);
	for(layer in hlayer) {
	    srcName = Math.abs(cyc[layer]);
        nsrcName = srcName;
        if (srcName < 10) nsrcName = '0'+srcName;	
        objsrc = imageDir+'/'+layer+'/'+layer+'_'+nsrcName+'.gif';
        if (noImg) objsrc = imageDir+'/'+noImgLayer+'/'+noImgLayer+'_'+nsrcName+'.gif';
        frame = '<div id="'+mainLayer+'Mini_'+layer+'" style="position:absolute; width:'+iWidth+'px; height:69px; z-index:'+avatarHeapMap[layer]+'; visibility: visible">';
        frame += '<img id="'+layerName+'Mini_'+layer+'" src="'+objsrc+'" width="'+iWidth+'" height="'+height+'">';
        frame += '</div>';
        strFrame += frame;
    }

    mainFrame = '<div id="cycAvatarMini" style="position:relative; width:'+iWidth+'px; height:'+height+'px; z-index:10;">'+strFrame+'</div>';
	return mainFrame;    
}

