Sunnet.ui = {};

Sunnet.ui.Color = 
{
	CAPTION: "#046C97"
}

var Color = Sunnet.ui.Color;
Sunnet.ui.Coordinate = 
{
	ALIGN_LEFT:0,
	ALIGN_CENTER:1,
	ALIGN_RIGHT:2,
	getAbsPos: function(el, isMsg)
	{
		var x, y;
	
		x = el.offsetLeft;
	  y = el.offsetTop;
		
		if (isMsg) alert(String.format("el.id: {0}; x: {1}; y: {2}", el.id, x, y));
		while(el = el.offsetParent)
	  {
	    x += el.offsetLeft;
	    y += el.offsetTop; if (isMsg) alert(String.format("x: {0}; y: {1}", x, y));
		}
		
		return {x:x, y:y}
	},
	setWindowPos: function(baseEl, elWin, align)
	{
		var x, y, w, x1, y1;
		
		var p = this.getAbsPos(baseEl);
		
		x1 = p.x;
		y1 = p.y;
		w = elWin.clientWidth;
		
		y = y1;
		
		if (align == this.ALIGN_CENTER)
		{
			var el = elWin;
			var sx, sy, wi, hi, w0, h0, w1, h1;
			w0 = window.innerWidth || document.body.clientWidth;
			h0 = window.innerHeight || document.body.clientHeight;
			
			w1 = el.clientWidth;
			h1 = el.clientHeight;
			
			wi = parseInt((w0 - w1)/2);
			hi = parseInt((h0 - h1)/2);
			
			sx = 0;
			sy = document.body.scrollTop;//0;
			
			if (wi < 0) wi = 0;
			x = sx + wi;
			
			if (hi < 0) hi = 0;
			y = sy + hi;
			
		}
		else
		{	
			if (align == null || align == this.ALIGN_LEFT)
			  x = x1 + baseEl.clientWidth;
			else
			  x = x1 - w;
		}
		  
		
		
		elWin.style.visibility = "visible"; 
		elWin.style.left = x + "px";
		elWin.style.top = y + "px";
	}
}

var Coord = Sunnet.ui.Coordinate;

Sunnet.ui.Displayer = function()
{
	var displayer = DomHelper.createElement("div");
	document.body.appendChild(displayer);
  displayer.style.position = "absolute";
  displayer.zIndex = 100000;
  displayer.style.left = "0px";
  displayer.style.top = "0px";
			
  displayer.style.backgroundColor = "black";
  displayer.style.color = "white";
			
  displayer.onclick = function(e)
  {
  	var element = Sunnet.util.Event.getSrcElement(e);
		element.style.visibility = "hidden";
	}
	
	return displayer;
}

Sunnet.ui.WallWindow = function()
{
	var displayer = DomHelper.createElement("div");
	document.body.appendChild(displayer);
  displayer.style.position = "absolute";
  displayer.style.zIndex = 99;
  displayer.style.left = "0px";
  displayer.style.top = "0px";
  
	displayer.style.width = "100%";
	displayer.style.height = document.body.scrollHeight;
	
	displayer.child = null;	
	displayer.style.opacity = 0.6;
	displayer.style.filter = "alpha(opacity=60)";	
  displayer.style.backgroundColor = "white";
  displayer.style.visibility = "hidden";
  //displayer.style.color = "white";
			
  displayer.onclick = function(e)
  {
		this.style.visibility = "hidden";
		
		if (this.child != null)
		  this.child.style.visibility = "hidden";
	}
	
	displayer.show = function()
	{
		this.style.visibility = "visible";
	}
	
	displayer.hide = function()
	{
		this.style.visibility = "hidden";
		
		if (this.child != null)
		  this.child.style.visibility = "hidden";
	}
	
	return displayer;
}

Sunnet.ui.WallWindow.doWall = function(wall, child)
{
	if (wall == null) wall = new Sunnet.ui.WallWindow();
	
	if (wall.child == null)
	{
	  wall.child = child;
	  child.style.zIndex = wall.style.zIndex + 1;
	}
	
	return wall;
}

Sunnet.ui.TimeDropDownList = function(element, ts, te)
{
	this.element = element;
	
}

Sunnet.ui.DropDownList = 
{
	addItem: function(el, text, value, index)
	{
		var oOption = document.createElement("OPTION");
		oOption.text = text;
		oOption.value = value;
		
		if (index >= 0)
		  el.options.add(oOption, index);
		else  
		  el.options.add(oOption);
	},
	addItems: function(el, start, end)
	{
		for (var i = start; i <= end; i++)
		  this.addItem(el, i, i);
	},
	selectItemByValue: function(el, value)
	{
		var i;
		for (i = 0; i < el.options.length; i++)
		  if ((el.options[i].text == value)||(el.options[i].value == value))
		  {
		  	el.options[i].selected = true;
		  	break;
		  }
	},
	addTime: function(el, s, e)
	{
		var t, h, ex;
		
		if ( s instanceof Array == false)
		{
			for (var i = s; i <= e; i++)
			{
				t = Time.short(i);
				h = t.h;
				ex = t.ex;
				this.addItem(el, h + ":00 " + ex, i + ":00");  
				this.addItem(el, h + ":30 " + ex, i + ":30");
			}
	  }
	  else
	  {
	  	var a = s;
	  	var b;
	  	var i, k;
	  	
	  	//0:00
	  	for (k = 0; k < a.length; k++)
	  	{
	  		b = a[k].split(":");
	  		
	  		t = Time.short(b[0]);
	  		h = t.h; ex = t.ex;
	  		
	  		this.addItem(el, h + ":" + b[1] + " " + ex, a[k]);  
				
	  	}
	  }
	  	
	}
}

var DropDownList = Sunnet.ui.DropDownList;

Sunnet.ui.TextBox = 
{
	decorateAmericanPhone: function(el)
	{
		if (!el) return;
		
		el.tag_key = true; el.tag_operate = false, el.tag_split = false, el.tag_len = false;
		el.keys = [8,9,35, 36, 37, 39, 46];
		
		el.onkeydown = function(e)
		{
			var e = e || window.event;
      var b = false;
      var el = this;
      
      for (var i = 0; i < el.keys.length; i++)
      {
      	if (e.keyCode == el.keys[i])
      	{
      		b = true;
      		break;
      	}
      }
      
        
      
      el.tag_key = ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105));  
      el.tag_operate = b;
      
      if (el.tag_key == true)//(e.keyCode >= 48 && e.keyCode <= 57)
      {
      	var len = el.value.length + 1;
      	
      	el.tag_split = (len == 4 || len == 8);
      	el.tag_len = len <= 12; 
      }
		};
		
		el.onkeypress = function(e)
		{
			var el = this;
    	
    	if (el.tag_split == true)
    	  el.value += "-";
    	  
    	if (el.tag_operate == true) 
    	  return true;
    	else
    	if (el.tag_len == false)
    	  return false;
    	
    	return el.tag_key;
		};
	},
	validateBlank: function(list)
	{
		for (var i = 0; i < list.length; i++)
		  if (list[i] && list[i].value == "") return i;
		
		return -1;  
	},
	validateBlankEx: function(names, refItem)
	{
		var nameList = names.split(String.SYMBOL_SPLIT);
		var list = [];
		
		for (var i = 0; i < nameList.length; i++)
		  list[i] = DomHelper.getElement(nameList[i]);
		
		var index = this.validateBlank(list);  
		
		if (refItem && index >= 0)
		  refItem.element = list[index];
		
		return index;
	},
	validateBlankEx2: function(names)
	{
		var refItem = {};
		var index = this.validateBlankEx(names, refItem);
		
		if (index >= 0)
		{
			alert("Please fill in all required fields.");
			refItem.element.focus();
			
			return false;
		}
		
		return true;
	},
	
	validateLeastOne: function(list)
	{
		if (list.length == 0) return true;
		
		for (var i = 0; i < list.length; i++)
		  if (list[i].value != "")
		    return true;
		
		return false;    
	},
	validateLeastOneEx: function(names, refItem)
	{
		var nameList = names.split(String.SYMBOL_SPLIT);
		var list = [];
		
		for (var i = 0; i < nameList.length; i++)
		  list[i] = DomHelper.getElement(nameList[i]);
		
		var b = this.validateLeastOne(list);
		
		if (refItem && b == false)
		  refItem.element = list[0];
		
		return b;  
	},
	validateLeastOneEx2: function(names, fieldname)
	{
		var refItem = {};
		var b = this.validateLeastOneEx(names, refItem);
		
		if (b == false)
		{
			alert("you should fill one " + fieldname + " at least.");
			refItem.element.focus();
			
			return false;
		}
		
		return true;
	}
}

var TextBox = Sunnet.ui.TextBox;

Sunnet.ui.Form = 
{
	setValidateReturn: function(status, element, message)
	{
		return {status:status, element:element, message:message};
	},
	
	getValidateItem: function(element, type, param)
      {
        return {element:element, type:type, param:param};
      },
	
	validate: function (list)
	{
		//element, type, param
		var i, j, b;
		
		var obj, ret = {}, el;
		
		ret.status = 1;
		ret.element = null;
		ret.message = "";
		
		
		for (i = 0; i < list.length; i++)
		{
			obj = list[i];
			
			if (obj.type == 'text')
			{
				if (obj.param == "blank")
				{
					if (obj.element.value == "")
					{
						return this.setValidateReturn(0, obj.element, "blank");
					}
				}
			}
			
			if (obj.type == 'select')
			{
				if (obj.param == ">0")
				{
					if (obj.element.selectedIndex == 0)
					{
						return this.setValidateReturn(0, obj.element, ">0");
					}
				}
			}
			
			if (obj.type == 'list')
			{
				if (obj.param == ">0")
				{
					el = obj.element;
					
					b = false;
					
					for (j = 0; j < el.options.length; j++)
					{
						if (el.options[j].selected == true)
						{
							b = true;
							break;
						}
					}
					
					if (b == false)
					  return this.setValidateReturn(0, obj.element, ">0");
					
				}
			}
			
		}
		
		return ret;
		
	}
}

var SForm = Sunnet.ui.Form;
