function Base(myId,sheetId)
{
	var self = this;
	
	this.myId = myId;
	this.sheetId = sheetId? sheetId:"default2";
	this.body = document.getElementsByTagName("html")[0];
	this.board = document.getElementById("board");
	this.cards = new Array;
	this.otherCards = new Array;
	this.edit = true;
	
	this.dragCard = null;
	this.count = 0;
	
	this.rightmenu = new Rightmenu("rightmenu");
	
	this.body.ondblclick = function(e)
	{
		if(self.edit)
		{
			/* make a card */
			if(!isMSIE)
			{
				var card = self.addCard(self.myId,e.pageX,e.pageY);
				card.editCard();
				
			}else
			{
				self.addCard(self.myId,event.x,event.y);
			}
		}else
		{
			alert("permission denied");
		}
	}
	
	this.body.oncontextmenu = function()
	{
		return false;
	}
	
	this.body.onmousemove = function(e)
	{
		self.dragging(self.dragCard,e);
	}
	
	if(this.myId) this.loadFirst();
}

Base.prototype.addCard = function(myId,x,y,color)
{
	var card = new Card(myId,x,y,color,true);
	this.board.appendChild(card.div);
	this.cards.push(card);
	return card;
}


Base.prototype.getId = function()
{
	return this.cards.length;
}

Base.prototype.setDragCard = function(id)
{
	this.dragCard = this.cards[id];
}

Base.prototype.removeDragCard = function(id)
{
	delete this.dragCard;
}

Base.prototype.dragging = function(card,e)
{
	if(card)
	{
		if(!isMSIE)
		{
			card.div.style.left = e.pageX + card.div.offsetX;
			card.div.style.top = e.pageY + card.div.offsetY;
			card.moving = true;
		}else
		{
			card.div.style.left = event.x + card.div.offsetX;
			card.div.style.top = event.y + card.div.offsetY;
			card.moving = true;
		}
	}
}

Base.prototype.toJSON = function()
{
	var self = this;
	var json;
	

	if(this.cards.length > 0)
	{
		var json = new String;
		for(var i=0 ; i < this.cards.length; i++)
		{
			if(this.cards[i])
			{
				var card = this.cards[i];
				
				if(!card.div.getAttribute("title").match(/^addDate/))
				{
				
					if(json.length > 0) json += ',';
					json += '{';
					json += '"value":' + '"' + card.div.getElementsByTagName("pre")[0].childNodes[0].nodeValue +'"';
					json += ',';
					json += '"class":' + '"' + card.div.className +'"';
					json += ',';
					if(card.div.img.getAttribute("src"))
					{
						json += '"img":' + '"' + card.div.img.getAttribute("src") +'"';
						json += ',';
					}
					json += '"date":' + '"' + card.div.getAttribute("title") +'"';
					json += ',';
					json += '"color":' + '"' + card.div.color +'"';
					json += ',';
					json += '"x":' + '"' + card.div.style.left.match(/[0-9]*/) +'"';
					json += ',';
					json += '"y":' + '"' + card.div.style.top.match(/[0-9]*/) +'"';
					json += '}';
				}
			}
			
		}
		
		if(json.length > 0)
		{
			json = '[' + json + ']';
		
			
			var query = encodeURIComponent(json);
			var url = "./json.php?json=" + query + "&id=" + this.myId + "&sid=" + this.sheetId;
		}else
		{	
			var url = "./json.php?id=" + this.myId + "&sid=" + this.sheetId;
		}
		debug.changeValue(json);
		
	}else
	{
		var url = "./json.php?id=" + this.myId + "&sid=" + this.sheetId;
	}
		
	
	new Ajax.Request(url, { method: 'get' ,
		onComplete: function(httpObj)
		{
			
			eval(httpObj.responseText);
		
			
			if(self.otherCards.length > 0)
			{
				for(var i = 0; i < self.otherCards.length ; i++)
				{
					self.board.removeChild(self.otherCards[i].div);
				}
				
					delete self.otherCards;
					self.otherCards = new Array;
			}
			
			leftmenu.clearMembers();
			
			for(var i = 0;i < activeusers["members"].length;i++)
			{
				var member = new Member(activeusers["members"][i]);
				//alert(member.li);
				leftmenu.addMember(member.li);
			}
			
			for(key in cards)
			{
				var value = cards[key];
				for(var i =0 ; i < value.length; i++)
				{
					var val = value[i];
					var card = new Card(key,val.x,val.y,val.color);
					val.value = val.value == 'null'? 'now writting...':val.value;
					card.changeValue(val.value);
					card.changeDate(val.date);
					if(val.img) card.changeImage(val.img);
					self.board.appendChild(card.div);
					self.otherCards.push(card);
				}
				
			}
			
			}
		}
	);

}


Base.prototype.loadFirst = function()
{
	var url = "./firstOpen.php?" + "id=" + this.myId + "&sid=" + this.sheetId;
	var self = this;
	
	
	new Ajax.Request(url, { method: 'get' ,
		onComplete: function(httpObj){
			
			
			var cards = eval(httpObj.responseText);
			
				for(var i = 0 ; i < cards.length; i++)
				{
					//debug.changeValue(cards[i].color);
					var card = self.addCard(self.myId,cards[i].x,cards[i].y,cards[i].color,true);
					card.changeValue(cards[i].value);
					card.changeDate(cards[i].date);
					if(cards[i].img) card.changeImage(cards[i].img);
				}
			}
		}
	);	

}

Base.prototype.readJSON = function()
{
	var url = "./json.php";
	var self = this;
	
	self.cards = new Array;
	for(var i=0 ; i < self.cards.length ; i++)
	{
		self.board.removeChild(self.cards[i].div);
		//debug.changeValue(self.cards[i].div);
	}
	/*
	new Ajax.Request(url, { method: 'get' ,
		onComplete: function(httpObj){
			var cards = eval(httpObj.responseText);
				for(var i = 0 ; i < cards.length; i++)
				{
					var card = new Card(cards[i].x,cards[i].y,cards[i].id);
					card.changeValue(cards[i].value);
					card.changeDate(cards[i].date);
					self.board.appendChild(card.div);
					self.cards.push(card);
				}
				
			
			}
		}
	);
	*/
}

Base.prototype.setAllOpacity = function(o,select)
{
	var allcards = this.cards.concat(this.otherCards);
	
	if(allcards)
	{
	
		if(!select)
		{
			for(var i=0 ; i < allcards.length; i++)
			{
				if(allcards[i] != null) allcards[i].div.style.opacity = o;
			}
		}else
		{
			for(var i=0 ; i < allcards.length; i++)
			{
				if(allcards[i] != null)
				{
					if(select == allcards[i].myId)
					{
						allcards[i].div.style.opacity = 1;
					
					}else
					{
						allcards[i].div.style.opacity = o;
					}
				}
			}
		}
	}
}