////////////////////////////////////////////////////////////
/*
Query string
*/
var QueryStringPair = null;
function QueryString(fieldName){
      if(document.location.search != null)
      {
	      	if (QueryStringPair == null)
		{
			QueryStringPair = new Array();
			var search = document.location.search.toLowerCase( );
			if(search.charAt(0)=='?')
			{
				search = search.substring(1, search.length);
			}
			var queryStringPair = "";
			var qPair =  search.split('&');
			for (var i=0; i<qPair.length; i++)
			{
				var tmp = qPair[i].split('=');
				if(tmp.length == 2)
				{
					QueryStringPair[tmp[0]] = tmp[1];
				}
			}
		}
		return QueryStringPair[fieldName.toLowerCase( )];
      	}
	else
	{
		return null;
	}
	
}

///////////////////////////////////////////////////////////////////////////////////////
/*
	DisplayInsider
*/
function DisplayInsiderTrans(tblId, tblNavId, lastPosId, frmId)
{
	insiderTransView = new InsiderTransView(tblId,tblNavId,lastPosId,frmId);
}

////////////////////////////////////////////////
/*
	1234567 (int) --> '1,234,567' (string)
*/
function FormatNum(num)
{
	if (num==-1)
	{
		return "---";
	}
	
	var res = "";	
	var tmp = Math.round(num) + "";
	var nTmp = tmp.length;
	while(nTmp > 3)
	{
		nTmp = nTmp - 3;
		res = "," + tmp.substring(nTmp, nTmp + 3)+ res;
	}
	res = tmp.substring(0, nTmp) + res;

	return res;
}
//////////////////////////////////////////////////
/*
InsiderTransView implement
*/
var insiderTransView = null;
var insiderTableStar = '<table border="0" cellpadding="0" cellspacing="0" width="560">';
var insiderTableEnd='</tbody></table>';
var insiderTransColumInfo='<thead><tr class="msBold" valign="top"><td width="90"><a href="javascript:insiderTransView.sort(4)">Date*</a></td><td width="175"><a href="javascript:insiderTransView.sort(2)">Name</a> / <a href="javascript:insiderTransView.sort(8)">Position</a></td><td  width="70" align="right"><a href="javascript:insiderTransView.sort(10)">Shares</a></td><td width="35" class="msBold"></td><td width="195"><a href="javascript:insiderTransView.sort(6)">Transaction</a></td></tr></thead><tbody>';
var insiderOwnerColumInfo='<thead><tr class="msBold" valign="top"><td width="165"><a href="javascript:insiderOwnerView.sort(2)">Name</a></td><td width="175"><a href="javascript:insiderOwnerView.sort(4)">Position</a></td><td  width="125" align="right"><a href="javascript:insiderOwnerView.sort(6)">Common Shares Held</a></td><td width="10" class="msBold"></td><td width="90">Report Date*</td></tr></thead><tbody>';

function InsiderTransView(transPaneId)
{
	if (typeof InsiderTransaction != "undefined")
	{
		//Init display panes
		this.pane = document.getElementById(transPaneId);
		for (var i=0; i<this.pane.childNodes.length; i++)
		{
			if (this.pane.childNodes[i].className == "insiderMenu")
			{
				this.pane.Menu = this.pane.childNodes[i];
			}
			else if(this.pane.childNodes[i].className == "insiderContent")
			{
				this.pane.Content = this.pane.childNodes[i];
			}
		}	
 
		//Init other info
		this.sortType = 0;
		this.fillterNameId = insiderTransaction.MaxPos; 
		insiderTransView = this;

		//Init year info and transPaneMenu  info
		var strNav="";
		var dis=0;
		for(var i=0; insiderTransaction.yearTbl[i]!=null; i++)
		{
			if (dis<30)
			{
				strNav = strNav + '<input type="Checkbox" onclick="insiderTransView.fillterByYear()" id="InsiderchkBoxYear' + i + '" checked>'+ insiderTransaction.yearTbl[i][0]+" ";
				dis = insiderTransaction.yearTbl[i][2];
			}
			else
			{
				strNav = strNav + '<input type="Checkbox" onclick="insiderTransView.fillterByYear()" id="InsiderchkBoxYear'+ i + '">'+ insiderTransaction.yearTbl[i][0]+" ";
			}
		}
		strNav = strNav + '| <a id="InsiderShowAll" style="display:none">Show All InsiderTrans</a>';
		this.curRecord = new Array(dis);
		for (var i=0; i<=dis; i++)
		{
			this.curRecord[i] = i;
		}
		

		//Init menu
		this.pane.Menu.innerHTML = strNav;
		this.sort(5);//sort record by date descending 
		
		this.display();
	}
}
function InsiderTransView$fillterByYear()
{
	var obj;
	this.curRecord = new Array(); //skip the last one (null)
	var Idx=0;
	for(var i=0; insiderTransaction.yearTbl[i]!=null; i++)
	{
		obj = document.getElementById('InsiderchkBoxYear'+i);
		if (obj.checked)
		{
			for (var j=insiderTransaction.yearTbl[i][1]; j<=insiderTransaction.yearTbl[i][2]; j++)
			{
				if(this.fillterNameId == insiderTransaction.MaxPos || this.fillterNameId == insiderTransaction.records[j][1])
				{
					this.curRecord[Idx] = j;
					Idx++;
				}
			}
		}
	}
	
	this.sort(5);//sort record by date descending 
	
	this.display();
}



 
//////////////////////////////////////////
/*
sort type
0x0  (0), no sort
0x10 (2), sort by name Ascending
0x11 (3), sort by name Descending
0x100(4), sort by date Ascending
0x101(5), sort by date Descending
0x110(6), sort by type Ascending
0x111(7), sort by type Descending
0x110(8), sort by position Ascending
0x111(9), sort by position Descending
0x110(10), sort by transShare Ascending
0x111(11), sort by transShare Descending
*/
//////////////////////////////////////////
function InsiderTransView$Sort(sorttype)
{
	var direct = this.sortType&1;
	if ((this.sortType == sorttype) && (direct == 0))
	{
		this.sortType = sorttype + 1;
	}
	else
	{
		this.sortType = sorttype;
	}
	
	var feildIdx;
	direct = this.sortType&1;
	switch(this.sortType&65534)
	{
		case 2:
		feildIdx = insiderTransaction.namePosIdx;
		break;
		case 4:
		feildIdx = insiderTransaction.datePosIdx;
		break;
		case 6:
		feildIdx = insiderTransaction.typePosIdx;
		break;
		case 8:
		feildIdx = insiderTransaction.positionPosIdx;
		break;
		case 10:
		feildIdx = insiderTransaction.shareIdx;
		break;
	}

	var tmpVal;
	if (direct == 1) //Descending sort
	{
		for(var i=this.curRecord.length-1; i>0; i--)
		{
			for(var j=0; j<i; j++)
			{
				if (insiderTransaction.records[this.curRecord[j]][feildIdx] < insiderTransaction.records[this.curRecord[j+1]][feildIdx])
				{
					tmpVal = this.curRecord[j];
					this.curRecord[j] = this.curRecord[j+1];
					this.curRecord[j+1] = tmpVal;
				}
			}
		}
	}
	else
	{
		for(var i=this.curRecord.length-1; i>0; i--)
		{
			for(var j=0; j<i; j++)
			{
				if (insiderTransaction.records[this.curRecord[j]][feildIdx] > insiderTransaction.records[this.curRecord[j+1]][feildIdx])
				{
					tmpVal = this.curRecord[j];
					this.curRecord[j] = this.curRecord[j+1];
					this.curRecord[j+1] = tmpVal;
				}
			}
		}
	}
	this.display();
}
function InsiderTransView$AdjustFrmHeigth()
{
	if (this.frmObj != null)
	{	
		this.frmObj.style.height=this.maintbl.offsetTop + 10;
		//var abc = document.getElementById("abc");
		//var str="";
		//for (var prop in this.maintbl){ 
		//    str = str + prop+':'+this.maintbl[prop] + "<BR>" ; 
		//} 
		//abc.innerHTML = str;
		//if (this.frmObj.contentDocument)
		//{//FOREFOX
		//	this.frmObj.style.height=document.body.offsetHeight;
		//}
		//else (this.frmObj.Document)
		//{//IE && Opera
		//	this.frmObj.style.height = document.body.scrollHeight;
		//}
		//alert(this.maintbl.offsetHeight+" : "+this.maintbl.scrollTop + " : " + this.maintbl.offsetTop  + " : " + this.maintbl.clientTop);
		
		
	}
}
function InsiderTransView$Display()
{
	//disClean
	var i, n;
    	


	//display
	var strTransInfo="";
	var strShareNum="";
	var transTmp;
	var nameTmp, nameTmp2, positionTmp;
	var shareTmp;
	var nTmp, tmp;
	var trClassName = new Array(' class="trEven" onmouseout="this.className =\'trEven\';" onmouseover="this.className =\'trSelect\';"',' class="trOdd" onmouseout="this.className =\'trOdd\';" onmouseover="this.className =\'trSelect\';"'); 
	if (this.curRecord != 0)
	{
		n = this.curRecord.length;
	}
	else
	{ 
		n = 0;
	}
	for (i=0; i<n; i++)
	{
		if (insiderTransaction.records[this.curRecord[i]][insiderTransaction.moneyPerShareIdx] == "$0.00")
		{
			transTmp = insiderTransaction.typeTbl[insiderTransaction.records[this.curRecord[i]][insiderTransaction.typePosIdx]];
		}
		else
		{
			transTmp = insiderTransaction.typeTbl[insiderTransaction.records[this.curRecord[i]][insiderTransaction.typePosIdx]] + " at " + insiderTransaction.records[this.curRecord[i]][insiderTransaction.moneyPerShareIdx] + " per share.";
		}

		positionTmp = insiderTransaction.positionTbl[insiderTransaction.records[this.curRecord[i]][insiderTransaction.positionPosIdx]];
		
		if (this.fillterNameId == insiderTransaction.MaxPos)
		{
			nameTmp = '<a href="javascript:insiderTransView.fillterByName('+ insiderTransaction.records[this.curRecord[i]][insiderTransaction.namePosIdx] +')">'+insiderTransaction.nameTbl[insiderTransaction.records[this.curRecord[i]][insiderTransaction.namePosIdx]]+'</a>';
			nameTmp2 = nameTmp + "  " + positionTmp;
		}
		else if ( i==0)
		{
			nameTmp = insiderTransaction.nameTbl[insiderTransaction.records[this.curRecord[i]][insiderTransaction.namePosIdx]];
			nameTmp2 = nameTmp + " / " + positionTmp;
		}
		else
		{
			nameTmp = insiderTransaction.nameTbl[insiderTransaction.records[this.curRecord[i]][insiderTransaction.namePosIdx]];
			nameTmp2 = nameTmp;
		}

		/*
		shareTmp = "";	
		tmp = records[this.curRecord[i]][shareIdx] + "";
		nTmp = tmp.length;
		while(nTmp > 3)
		{
			nTmp = nTmp - 3;
			shareTmp = "," + tmp.substring(nTmp, nTmp + 3)+ shareTmp;
		}
		shareTmp = tmp.substring(0, nTmp) + shareTmp;
		*/
		shareTmp = FormatNum(insiderTransaction.records[this.curRecord[i]][insiderTransaction.shareIdx]);

		
		strTransInfo = strTransInfo + '<tr'+trClassName[i&1]+'><td class="msData" valign="top">' + insiderTransaction.dateTbl[insiderTransaction.records[this.curRecord[i]][insiderTransaction.datePosIdx]]
		+'</td><td class="msNormal" valign="top">'+ nameTmp2
		+'</td><td class="msData" align="right" valign="top">' + shareTmp + '</td><td class="msBold"></td><td class="msNormal" align="left" valign="top">'
		+transTmp+'</td></tr>';
	}
	this.pane.Content.innerHTML = insiderTableStar + insiderTransColumInfo + strTransInfo + insiderTableEnd;
}

function InsiderTransView$ShowAllInsider()
{
	this.fillterNameId = insiderTransaction.MaxPos;
	//Set nav to disable show all insiderTransView
	var obj;
	obj = document.getElementById("InsiderShowAll");
	obj.style.display = "none";
	obj.removeAttribute("href");
	obj.style.color = "#333333";
	this.fillterByYear();
}
function InsiderTransView$FillterByName(nameId)
{
	this.fillterNameId = nameId;
	var _records = new Array();
	var idx=0;
	for(var i=0; i<this.curRecord.length; i++)
	{
		if (insiderTransaction.records[this.curRecord[i]][1] == nameId)
		{
			_records[idx] = this.curRecord[i];
			idx++;
		}
	}
	//Set nav to show all insiderTransView
	var obj;
	obj = document.getElementById("InsiderShowAll");
	obj.style.display = "";
	obj.href = "javascript:insiderTransView.showAllInsider()";
	obj.style.color = "red";
	this.curRecord = _records;
	this.sort(5);//sort record by date descending 
	this.display();
}


function InsiderOwnerView(ownerPaneId)
{
	if (typeof InsiderOwner != "undefined")
	{
		//Init display panes
		this.pane = document.getElementById(ownerPaneId);
		for (var i=0; i<this.pane.childNodes.length; i++)
		{
			if(this.pane.childNodes[i].className == "insiderContent")
			{
				this.pane.Content = this.pane.childNodes[i];
			}
		}	
 
		//Init other info
		this.sortType = 0;
		insiderOwnerView = this;
		this.curRecord = new Array(insiderOwner.records.length -1);
		for (var i=0;i<insiderOwner.records.length -1; i++)
		{
			this.curRecord[i] = i;
		}
		//Init menu
		this.sort(2);//sort record by name ascending 
		
		this.display();
	}
}
 
//////////////////////////////////////////
/*
sort type
0x0  (0), no sort
0x10 (2), sort by name Ascending
0x11 (3), sort by name Descending
0x100(4), sort by position Ascending
0x101(5), sort by position Descending
0x110(6), sort by sharesHeld Ascending
0x111(7), sort by sharesHeld Descending
*/
//////////////////////////////////////////
function InsiderOwnerView$Sort(sorttype)
{
	var direct = this.sortType&1;
	if ((this.sortType == sorttype) && (direct == 0))
	{
		this.sortType = sorttype + 1;
	}
	else
	{
		this.sortType = sorttype;
	}
	
	var feildIdx;
	direct = this.sortType&1;
	switch(this.sortType&65534)
	{
		case 2:
		feildIdx = insiderOwner.namePosIdx;
		break;
		case 4:
		feildIdx = insiderOwner.positionPosIdx;
		break;
		case 6:
		feildIdx = insiderOwner.sharesHeldIdx;
		break;		
	}

	var tmpVal;
	if (direct == 1) //Descending sort
	{
		for(var i=this.curRecord.length-1; i>0; i--)
		{
			for(var j=0; j<i; j++)
			{
				if (insiderOwner.records[this.curRecord[j]][feildIdx] < insiderOwner.records[this.curRecord[j+1]][feildIdx])
				{
					tmpVal = this.curRecord[j];
					this.curRecord[j] = this.curRecord[j+1];
					this.curRecord[j+1] = tmpVal;
				}
			}
		}
	}
	else
	{
		for(var i=this.curRecord.length-1; i>0; i--)
		{
			for(var j=0; j<i; j++)
			{
				if (insiderOwner.records[this.curRecord[j]][feildIdx] > insiderOwner.records[this.curRecord[j+1]][feildIdx])
				{
					tmpVal = this.curRecord[j];
					this.curRecord[j] = this.curRecord[j+1];
					this.curRecord[j+1] = tmpVal;
				}
			}
		}
	}
	this.display();
}
function InsiderOwnerView$Display()
{
	//disClean
	var i, n;
	//display
	var strTransInfo="";
	var trClassName = new Array(' class="trEven" onmouseout="this.className =\'trEven\';" onmouseover="this.className =\'trSelect\';"',' class="trOdd" onmouseout="this.className =\'trOdd\';" onmouseover="this.className =\'trSelect\';"');
	n = this.curRecord.length;
	for (i=0; i<n; i++)
	{

		strTransInfo = strTransInfo + '<tr'+trClassName[i&1]+'><td class="msNormal" valign="top">' + insiderOwner.nameTbl[insiderOwner.records[this.curRecord[i]][insiderOwner.namePosIdx]]
		+'</td><td class="msNormal" valign="top">'+ insiderOwner.positionTbl[insiderOwner.records[this.curRecord[i]][insiderOwner.positionPosIdx]]
		+'</td><td class="msData" align="right" valign="top">' 
		+ FormatNum(insiderOwner.records[this.curRecord[i]][insiderOwner.sharesHeldIdx]) 
		+ '</td><td class="msBold"></td><td class="msData" align="left" valign="top">'
		+insiderOwner.records[this.curRecord[i]][insiderOwner.reportDateIdx]+'</td></tr>';
		
	}
	this.pane.Content.innerHTML = insiderTableStar + insiderOwnerColumInfo + strTransInfo + insiderTableEnd;
}

InsiderTransView.prototype = {
	sort:InsiderTransView$Sort,
	display:InsiderTransView$Display,
	fillterByName:InsiderTransView$FillterByName,
	fillterByYear:InsiderTransView$fillterByYear,
	showAllInsider:InsiderTransView$ShowAllInsider,
	adjustFrmHeigth:InsiderTransView$AdjustFrmHeigth
}

InsiderOwnerView.prototype = {
	sort:InsiderOwnerView$Sort,
	display:InsiderOwnerView$Display
}

