﻿// Copyright(c)2007 SWSPOT All rights reserved.
// Title : Stylet Vector Class Javascript Utility
// Version : 1.0
// Date : 2008-03-10
// Client : Stylet
// Developer : Jae-Kyun, Park (NOSPAM_______duex5190@nate.com)

// History : 1.0 - Functions are Implemented.

var Vector = function()
{
	this.initialize();
}

Vector.prototype = {

    elements : null,
    
    
    Join : function(token)
    {
		var retval = "";
		for(i=0;i<this.elements.length;i++)
		{
			if(this.elements[i]!="")
			{
				if(typeof(token)!="undefined" && retval!="")
					retval += token;
				retval += this.elements[i];
			}
		}
		return retval;
    },
   
    //자료추가
    //@obj : 추가 object 
    Push : function(obj)
   {
        this.elements.push(obj);
   },
   
   //내장자료구조의 갯수를 구함   
   Count : function()
   {
        return this.elements.length;
   },
   
   //객체가 비어있는지 여부를 검사
   IsEmpty : function()
   {
        if(this.elements.length<=0)
            return true;
        else
            return false;
   },
   
   //특정인덱스에 있는 객체를 제거
   RemoveAt : function(indexNo)
   {
           if(this.sizecheck(indexNo))
           {
                this.elements[indexNo] = null;
                this.reproduce(); 
           }else
           {
                this.throwerr("index out of range [Length : " + this.elements.length + " / Called Index : " + indexNo + "]");
           }
   },
   
   //특정인덱스에 있는 객체를 얻어옴
   Get : function(indexNo)
   {
        if(this.sizecheck(indexNo))
        {
            return this.elements[indexNo];
        }else
        {
            this.throwerr("index out of range [Length : " + this.elements.length + " / Called Index : " + indexNo + "]");
        }
   },
   
   //특정인덱스에 있는 객체를 리턴하며 제거함
   Pop : function(indexNo)
   {
        var retobj = this.Get(indexNo);
        this.RemoveAt(indexNo);
        return retobj;     
   },
   
   //랜덤하게 객체를 하나 리턴하며 제거함.
   PopRandom : function()
   {
        //랜덤범위를 구함
        var rnd_max = this.elements.length - 1;
        var rnd_min = 0;
        var x = Math.floor( Math.random()*(rnd_max-rnd_min)+rnd_min);
        return this.Pop(x);
   },
   
   //해당 객체가 포함되어 있는지 여부를 검사
   Contains : function(compareObj)
   {
        var temparr = this.elements;
        var retval = false;
        var z = 0;
        for(z=0;z<temparr.length;z++)
        {
            if(temparr[z]==compareObj)
            {
                retval = true;
                break; 
            }
        }
        return retval;
   },
   
   //호출 인덱스가 유효한 인덱스인지를 검사
   //@indexNo : 호출인덱스
   sizecheck : function(indexNo)
   {
        if(indexNo<this.elements.length)
        {
            return true;
        }else
        {
            return false;
        }
   },
   
   //에러발생
   //@errmsg : 에러메세지
   throwerr : function(errmsg)
   {
        alert(errmsg);
   },
   
   //Array 재생성 (null을 제외하고 array 를 재생성하여 elements 에 할당)   
   reproduce : function()
   {
        var temparr = this.elements;
        var newarr = new Array();
        var z = 0;
        for(z=0;z<temparr.length;z++)
        {
            if(temparr[z]!=null)newarr.push(temparr[z]);
        }
        this.elements = newarr;
   },
    
   //객체 Initialize 
    initialize : function()
   {
        this.elements = new Array();
   }     
}
