var addEvent = function (a,b,c,d,e){return YAHOO.util.Event.addListener(a,b,c,d,e);};
var removeEvent = function (a,b,c,d,e){return YAHOO.util.Event.removeListener(a,b,c,d,e);};
var getEvent = function (a,b,c,d,e){return YAHOO.util.Event.getEvent(a,b,c,d,e);};
var stopEvent = function(e){ YAHOO.util.Event.stopPropagation(e); YAHOO.util.Event.preventDefault(e); return false; };

var gPos = function (a,b,c,d,e){return YAHOO.util.Dom.getXY(a,b,c,d,e);};
var gClass = function (a,b,c){return YAHOO.util.Dom.getElementsByClassName(a,b,c);};
var gStyle = function(a,b){return YAHOO.util.Dom.getStyle(a,b);};
var sStyle = function(a,b,c){return YAHOO.util.Dom.setStyle(a,b,c);};
var addClass = function(a,b){return YAHOO.util.Dom.addClass(a,b)};
var hasClass = function(a,b){return YAHOO.util.Dom.hasClass(a,b)} ;
var removeClass = function(a,b){return YAHOO.util.Dom.removeClass(a,b)};

var $id = function(a){return YAHOO.util.Dom.get(a)};
var pClass = YAHOO.popElementByClass ;


/*get library*/

	var Library = new function() 
	{
		var oSelf = this;
		
		var dHead = document.getElementsByTagName('head')[0];
		var oLibrary = {};
		sProxyPath = 'proxy.php?url=';
	
		var onReadyStateChange = function(oCallback,  URLS , URLS2)
		{
			
			
			if(this.readyState == 'loaded' || this.readyState == 'complete')
			{
				this.completed = true;
				loadHandler(oCallback , this.tagName.toLowerCase(),  URLS , URLS2);		
				
			}
		};

		var onLoad = function(oCallback,  URLS , URLS2)
		{
			this.completed = true;
			loadHandler(oCallback , this.tagName.toLowerCase(),  URLS , URLS2);				
		}

		var loadHandler = function(oCallback,sType , URLS , URLS2 )
		{
			var sUrl;
			if( URLS.length)
			{
				sUrl = URLS.shift();
			};
			
			
			if(sUrl)
			{
				if(oLibrary[sUrl])
				{
					loadHandler(oCallback,sType , URLS , URLS2 );
				}
				else
				{
					createElement(sType,oCallback,sUrl,  URLS , URLS2 );
				};
			
			}else
			{
				oCallback(URLS2);
				this.onreadystatechange = null;			
			};
		};

		var createElement = function(sType,oCallback,sUrl,  URLS , URLS2)
		{			
			sType = sType ||'script';

			var dEl = document.createElement(sType);
			
			if(sType=='script')
			{
				dEl.setAttribute('src',sUrl);
				dEl.setAttribute('type','text/javascript');
			}
			else
			{
				dEl.setAttribute('rel',"stylesheet");
				dEl.setAttribute('type',"text/css");
				dEl.setAttribute('href',sUrl);
			};

			if(document.uniqueID)
			{	
				//IE
				dEl.onreadystatechange = function()
				{
					//fix memory leak
					(function(dEl){ onReadyStateChange.call( dEl , oCallback ,  URLS , URLS2 )})(this);	
				};

				dHead.appendChild(dEl);
				

			}else if(document.getBoxObjectFor || (window.opera && document.createElement('canvas').getContext) )
			{//Gecko || Opera9+
				
				dEl.onload = function(){ onLoad.call( dEl , oCallback ,  URLS , URLS2 ) };
				dEl.onerror = function(){};
				dHead.appendChild(dEl);

			}else if(window.XMLHttpRequest)
			{//for other browsers, need XmlHttpRequest + proxy to get script
		
				var oXhr = new XMLHttpRequest();
				oXhr.onreadystatechange = function()
				{
					if(oXhr.readyState==4 )
					{
					
						if( oXhr.status == 200 )
						{
							if(sType=='script')
							{
								
								if(window.opera)
								{							
									window.eval( oXhr.responseText );	
								}
								else
								{
									//Safari?
									var dEl = document.createElement('script');
									dEl.appendChild( document.createTextNode( oXhr.responseText ) );	
									dEl.completed = true;
									dHead.appendChild(dEl);								
								};
								oLibrary[sUrl] = true;
								
							}
							else
							{
								var dEl = document.createElement('style');
								oLibrary[sUrl] = true;
							
								if(window.opera)
								{
									dEl.innerHTML = oXhr.responseText ;
									
								
								}else
								{
									//Safari?
									dEl.appendChild( document.createTextNode( oXhr.responseText ) );	
								}
								dEl.completed = true;
								dHead.appendChild(dEl);
								
								
							};
														
						
							oXhr = null;
							loadHandler(oCallback ,sType,  URLS , URLS2);	
							
						}
						else
						{
							throw Error('Error : Library.loadScript \n XMLHttpRequest readyState is ' + oXhr.status);
						}
					}
				};
				
				sUrl = sProxyPath + encodeURIComponent( sUrl);
				oXhr.open("GET",sUrl , true);
				oXhr.send("");
				
			}

			
		};
		
		this.setProxyPath = function(sUrl)
		{
			sUrl +='';
			if(sUrl)
			{
				sProxyPath = sUrl;
			};
		};

		this.getProxyPath = function(sUrl)
		{
			return sProxyPath;			
		};


		this.loadJS = function()
		{
			
			var oCallback = arguments[0];
			oCallback = oCallback || {success:function(){} ,failure:function(){}};
			aUrl =  [];

			for(var i=1,j=arguments.length;i<j;i+=1)
			{
				aUrl[i-1] = arguments[i] + '';
			}
			
		
			if(typeof(oCallback)!='function')
			{
				throw Error('Error : Library.loadScript \n Callback is not Function');
				return;
			};
		
			var aScript = document.getElementsByTagName('script');
			
			for(var i=0,j=aScript.length;i<j;i++)
			{
				var sSrc = aScript[i].getAttribute('src');
				if(sSrc && aScript[i].completed)
				{
					oLibrary[sSrc] = true;
				}
			};

			var URLS = [].concat(aUrl) ;
			var URLS2 = [].concat(aUrl) ;
			loadHandler(oCallback,'script' , URLS , URLS2);
		}

		this.loadCSS = function()
		{
			
			var oCallback = arguments[0];
			oCallback = oCallback || {success:function(){} ,failure:function(){}};
			aUrl =  [];

			for(var i=1,j=arguments.length;i<j;i+=1)
			{
				aUrl[i-1] = arguments[i] + '';
			}
			
		
			if(typeof(oCallback)!='function')
			{
				throw Error('Error : Library.loadCSS  \n Callback is not Function');
				return;
			};
		
			var aScript = document.getElementsByTagName('link');
			for(var i=0,j=aScript.length;i<j;i++)
			{
				var sSrc = aScript[i].getAttribute('href');
				var sRel = (aScript[i].getAttribute('rel') + '').toLowerCase();
				if(sSrc && sRel == 'stylesheet' && aScript[i].completed )
				{
					oLibrary[sSrc] = true;					
				}
			};

		
			var URLS = [].concat(aUrl) ;
			var URLS2 = [].concat(aUrl) ;
			loadHandler(oCallback,'link' , URLS , URLS2);
		}
	}

/* namespace */
YAHOO.namespace('YAHOO.Tw');
YAHOO.namespace('YAHOO.Tw.News');

/* reference */
var YUD = YAHOO.util.Dom;
var YUE = YAHOO.util.Event;
var YUC = YAHOO.util.Connect;
var YNWS= YAHOO.Tw.News;



/*more userful tool*/
YNWS.Tool = new function()
{

	this.popElementByClass = function(oNode,sClass,iMaxLevel)
	{
		var re = new RegExp('\\b' + sClass + '\\b');
		
		while(oNode)
		{
			
			if(iMaxLevel)
			{
				if( iMaxLevel<0){return null;}	
				else{ iMaxLevel--;};				
			};
			
			
			var c = oNode['className'];
			
			if(c==null ){return null;}
			else if ( re.test(c) ) {return oNode;}		
			else
			{				
				oNode = oNode['parentNode'];
			};			
		};
		return null;
	};

};


//====================

if(window.addEventListener)
{ 

	if(document.getBoxObjectFor)
	{
		//Gecho
		
		document.addEventListener("DOMContentLoaded", DOMLoad, null);
	}
	else
	{
		window.addEventListener("load",DOMLoad,false);
	}
}


function DOMLoad(e,el)
{
 if(DOMLoad.intiateOnce){return;};
	
	if(  el && el.runtimeStyle )
	{
		//IE5.0+
		if(document.readyState.toLowerCase()=="complete" ||	document.readyState.toLowerCase()=="interactive")
		{
		 el.runtimeStyle.behavior = "none";
		}
		else
		{
			return false;
		};
	}
	


 //ynwsInitPage();
 DOMLoad.intiateOnce = true;
}






// news listing ==================================

function installYnwsNewsListing()
{


 var id = $setId();
 document.write("<u id=" + id + "></u>");
 var obj = $id(id).parentNode;
 var oForm = $tags('form',obj)[0];
 var oSelectPri =  $tags('select',oForm)[0];

if(oSelectPri.value == '')
{
	$tags('select',oForm)[1].disabled = true;
};

 addEvent(oSelectPri,'change',YnwsNewsListingChangePri);
}

function YnwsNewsListingChangePri(e)
{

	var oEl = e.target || e.srcElement;
	var oSelectSec =YAHOO.getNextElementByTagName(oEl,'select');
	//if(oSelectSec) {alert(oSelectSec.value);}
	if(oEl.value=="")
	{
		oSelectSec.value="";
		oSelectSec.disabled = true;
	}
	else
	{
			oSelectSec.disabled = false;

			// remove exsist options
			var ops = $tags('option',oSelectSec);
			var iChildLength = ops.length;
			for (var n=iChildLength; n>1; n--)
			{	
				oSelectSec.removeChild(ops[n-1]);
			}


		for(var z in ynwsCategory)
		{
			if (ynwsCategory[z].categoryid == oEl.value)
			{
				for(var y in ynwsCategory[z].item)
				{
					var op = $newNode('option');
					op.value = ynwsCategory[z].item[y].value;
					op.innerHTML =ynwsCategory[z].item[y].name;
					oSelectSec.appendChild(op);
				}
			}
		}

/*

		for(var y in ynwsCategory[oEl.value].item)
		{

			//sNewOptionTxt +='<option value="' + ynwsCategory[oEl.value].item[y].value + '">'+ynwsCategory[oEl.value].item[y].name+'</option>';
					var op = $newNode('option');
					// op.value = ynwsCategory[oEl.value].item[y].value;
					op.value = ynwsCategory[oEl.value].item[y].name;
					op.innerHTML =ynwsCategory[oEl.value].item[y].name;
					oSelectSec.appendChild(op);
			//oSelectSec.innerHTML = sNewOptionTxt;

		}

*/

	}

}

// inner browsing of tabs =============================
function installYnwsInnerBrowsing()
{
 var id = $setId();
 document.write("<u id=" + id + "></u>");
 var obj = $id(id).parentNode;
 var name = $attr(obj,"name");
 switch(name)
 {
    case "ynwsstchrta":init_stkChart_All(obj);break;
    case "ynwsrecomdra":init_stkChart_All(obj);break;
	default:return;
 }
}


function init_stkChart_All(el)
{
	
	if(el.runtimeStyle){  el.runtimeStyle.behavior ="none";  }  
    var h3 = $tags("h3",el);
    if(h3.length==1){return;};
    var d = $newNode("div");
	d.className="ww";
    var t = "<table class=ui><tr>";
    for(var i=0;i<h3.length;i++)
    {
        t += "<td class='tab"+i+"'><div><span onclick='return false;'><a><em>" + h3[i].innerHTML + "</em></a></span></div></td>";

		//t += "<td class='tab"+i+"'><div><span onclick='return false;'><a><em>" + h3[i].innerHTML + "</em></a></span></div></td>";
        h3[i].style.display="none";
        h3[i].bd =  getNextObjByTagName(h3[i],"div");
        h3[i].bd.style.display="none";    
    };
    t += "</tr></table>";
    
    d.innerHTML = t;
    el.insertBefore(d,h3[0]);
    
    var tabs = $tags("a",d);
    
    for(var i=0;i<tabs.length;i++)
    {
        tabs[i].onclick = init_stkChart_All_focus;
        tabs[i].dofocus = init_stkChart_All_focus;
        tabs[i].bd = h3[i].bd ;
    } 
	tabs[0].dofocus();
    //tabs[1].dofocus();
}

function init_stkChart_All_focus(e)
{
    var tr = getObjByClass(this,"tr","");    
    var td = this.parentNode.parentNode.parentNode;

    if( tr.lastFocus !=null && tr.lastFocus!=td)
    {
        tr.lastFocus.className="";
        tr.lastBD.style.display="none";
    }
    
    
    tr.lastFocus =  td;
    tr.lastBD = this.bd;

		// off all tab
		var tabs =  $tags("td",tr);
		for (var j=0;j<tabs.length;j++)
		{
				tabs[j].className = 'tab'+j;
		}
		// turn on the tab
		td.className += '_on';	
	


    this.bd.style.display="block";
    return false;
}

function installYnwsInnerBrowsing()
{
 var id = $setId();
 document.write("<u id=" + id + "></u>");
 var obj = $id(id).parentNode;
 var name = $attr(obj,"name");
 switch(name)
 {
    case "ynwsstchrta":init_stkChart_All(obj);break;
    case "ynwsrecomdra":init_stkChart_All(obj);break;
	default:return;
 }
}


function init_stkChart_All(el)
{
	
	if(el.runtimeStyle){  el.runtimeStyle.behavior ="none";  }  
    var h3 = $tags("h3",el);
    if(h3.length==1){return;};
    var d = $newNode("div");
	d.className="ww";
    var t = "<table class=ui><tr>";
    for(var i=0;i<h3.length;i++)
    {
        t += "<td class='tab"+i+"'><div><span onclick='return false;'><a><em>" + h3[i].innerHTML + "</em></a></span></div></td>";

		//t += "<td class='tab"+i+"'><div><span onclick='return false;'><a><em>" + h3[i].innerHTML + "</em></a></span></div></td>";
        h3[i].style.display="none";
        h3[i].bd =  getNextObjByTagName(h3[i],"div");
        h3[i].bd.style.display="none";    
    };
    t += "</tr></table>";
    
    d.innerHTML = t;
    el.insertBefore(d,h3[0]);
    
    var tabs = $tags("a",d);
    
    for(var i=0;i<tabs.length;i++)
    {
        tabs[i].onclick = init_stkChart_All_focus;
        tabs[i].dofocus = init_stkChart_All_focus;
        tabs[i].bd = h3[i].bd ;
    } 
	tabs[0].dofocus();
    //tabs[1].dofocus();
}

function init_stkChart_All_focus(e)
{
    var tr = getObjByClass(this,"tr","");    
    var td = this.parentNode.parentNode.parentNode;

    if( tr.lastFocus !=null && tr.lastFocus!=td)
    {
        tr.lastFocus.className="";
        tr.lastBD.style.display="none";
    }
    
    
    tr.lastFocus =  td;
    tr.lastBD = this.bd;

		// off all tab
		var tabs =  $tags("td",tr);
		for (var j=0;j<tabs.length;j++)
		{
				tabs[j].className = 'tab'+j;
		}
		// turn on the tab
		td.className += '_on';	
	


    this.bd.style.display="block";
    return false;
}

// == ie select bug
function foo(px,py,pw,ph,baseElement,fid)
{
		var win = document.getElementById(this.fid);
}


function dropdown_menu_hack(el)
{

	if(el.runtimeStyle.behavior.toLowerCase()=="none"){return;}
	el.runtimeStyle.behavior="none";

	var ie5 = (document.namespaces==null);
	el.ondblclick = function(e)
	{
		window.event.returnValue=false;
		return false;
	}
	
	if(window.createPopup==null)
	{
		
		var fid = "dropdown_menu_hack_" + Date.parse(new Date());
	
		window.createPopup = function()
		{
			if(window.createPopup.frameWindow==null)
			{
					el.insertAdjacentHTML("AfterEnd","<iframe   id='"+fid+"' name='"+fid+"' src='about:blank'  frameborder='1' scrolling='no'></></iframe>");
					var f = document.frames[fid];
					f.document.open();
					f.document.write("<html><body></body></html>");
					f.document.close();
					f.fid = fid; 
					

					var fwin = document.getElementById(fid);
					fwin.style.cssText="position:absolute;top:0;left:0;display:none;z-index:99999;";
				
					
					f.show = function(px,py,pw,ph,baseElement)
					{							
						py = py + baseElement.getBoundingClientRect().top + Math.max( document.body.scrollTop, document.documentElement.scrollTop) ;
						px = px + baseElement.getBoundingClientRect().left + Math.max( document.body.scrollLeft, document.documentElement.scrollLeft) ;
						fwin.style.width = pw + "px";
						fwin.style.height = ph + "px";						
						fwin.style.posLeft = px ;
						fwin.style.posTop = py ;		
						fwin.style.display="block";						
					}

					
					f_hide = function(e)
					{ 
						if(window.event && window.event.srcElement	&& window.event.srcElement.tagName && window.event.srcElement.tagName.toLowerCase()=="select"){return true;}
						fwin.style.display="none";
					} 
					f.hide = f_hide;
					document.attachEvent("onclick",f_hide);		
					document.attachEvent("onkeydown",f_hide);		
					
			}
			return f;
		}
	}

	function showMenu()
	{

		function selectMenu(obj)
			{				
				var o = document.createElement("option");

				//o.value = obj.value;
				o.value = obj.alt;

				o.innerHTML = obj.innerHTML;			
				while(el.options.length>0){el.options[0].removeNode(true);}
				el.appendChild(o);
				el.title =  o.innerHTML; 
				el.contentIndex = obj.selectedIndex  ;
				el.menu.hide(o.value); 				
			}
		el.menu.show(0 , el.offsetHeight , 10,  10, el); 

		var mb = el.menu.document.body;
		
		mb.style.cssText ="border:solid 1px black;margin:0;padding:0;overflow-y:auto;overflow-x:auto;background:white;text-aligbn:center;font-family:Verdana;font-size:12px;";
		var t = el.contentHTML;


		t = t.replace(/<select/gi,'<ul');
		t = t.replace(/<option/gi,'<li');
		t = t.replace(/<\/option/gi,'</li');
		t = t.replace(/<\/select/gi,'</ul');
		t = t.replace(/value=/gi,'alt=');  /*the value of li must be number, so we change it into alt*/

		mb.innerHTML = t;
		
		el.select = mb.all.tags("ul")[0];
		el.select.style.cssText="list-style:none;margin:0;padding:0;";
		mb.options = el.select.getElementsByTagName("li");
		
		for(var i=0;i<mb.options.length;i++)
		{
			mb.options[i].selectedIndex = i;
			mb.options[i].style.cssText = "list-style:none;margin:0;padding:1px 2px;width/**/:100%;cursor:hand;cursor:pointer;white-space:nowrap;"
			mb.options[i].title =mb.options[i].innerHTML;
			mb.options[i].alt =mb.options[i].alt;
			mb.options[i].innerHTML ="<nobr>" + mb.options[i].innerHTML + "</nobr>";
			mb.options[i].onmouseover = function()
				{
					if( mb.options.selected ){mb.options.selected.style.background="white";mb.options.selected.style.color="black";}
					mb.options.selected = this;
					this.style.background="#333366";this.style.color="white";
				}
			
			mb.options[i].onmouseout = function(){this.style.background="white";this.style.color="black";}
			mb.options[i].onmousedown = function(){selectMenu(this);	}
			mb.options[i].onkeydown = function(){selectMenu(this);	}
				

			if(i == el.contentIndex)
			{
				mb.options[i].style.background="#333366";
				mb.options[i].style.color="white";	
				mb.options.selected = mb.options[i];
			}
		}
	
		
		var mw = Math.max(   ( el.select.offsetWidth + 22 ), el.offsetWidth + 22  );
			 mw = Math.max(  mw, ( mb.scrollWidth+22) );
		var mh =  mb.options.length * 15  + 8 ; 
			 
		var mx = (ie5)?-3:0;
		var my = el.offsetHeight -2;
		var docH =   document.documentElement.offsetHeight ;
		var bottomH = docH  - el.getBoundingClientRect().bottom ; 

		mh = Math.min(mh, Math.max(( docH - el.getBoundingClientRect().top - 50),100)		);
		
		if(( bottomH < mh) )
		{
			
			mh = Math.max( (bottomH - 12),10);
			if( mh <100 ) 
			{
				my = -100 ;

			}
			mh = Math.max(mh,100);			
		}

		
		self.focus(); 
		
		el.menu.show( mx , my ,  mw, mh , el); 
		sync=null;
		if(mb.options.selected)
		{
			mb.scrollTop = mb.options.selected.offsetTop;
		}
		window.onresize = function(){el.menu.hide()};		
	}

	function switchMenu()
	{
		if(event.keyCode)
		{
			if(event.keyCode==40){ el.contentIndex++ ;}
			else if(event.keyCode==38){ el.contentIndex--; }
		}
		else if(event.wheelDelta )
		{
			if (event.wheelDelta >= 120)
			el.contentIndex++ ;
			else if (event.wheelDelta <= -120)
			el.contentIndex-- ;
		}else{return true;}




		if( el.contentIndex > (el.contentOptions.length-1) ){ el.contentIndex =0;}
		else if (el.contentIndex<0){el.contentIndex = el.contentOptions.length-1 ;}

		var o = document.createElement("option");
			 o.value = el.contentOptions[el.contentIndex].value;
			 o.innerHTML = el.contentOptions[el.contentIndex].text;
			 while(el.options.length>0){el.options[0].removeNode(true);}
			 el.appendChild(o);
			 el.title =  o.innerHTML; 
	}
	if(dropdown_menu_hack.menu ==null)
	{
		dropdown_menu_hack.menu =  window.createPopup();
		document.attachEvent("onkeydown",dropdown_menu_hack.menu.hide);
	}
	el.menu = dropdown_menu_hack.menu ;
	el.contentOptions = new Array();
	el.contentIndex = el.selectedIndex;
	el.contentHTML = el.outerHTML;

	for(var i=0;i<el.options.length;i++)
	{	
		el.contentOptions [el.contentOptions.length] = 
		{
			"value": el.options[i].value,
			"text": el.options[i].innerHTML
		}

		if(!el.options[i].selected){el.options[i].removeNode(true);i--;};
	}


	el.onkeydown = switchMenu;
	el.onclick = showMenu;
	el.onmousewheel= switchMenu;

}


// ====-------------------------------------------- friendly print

function PrintPreview()
{
	var s = $tags("link");
	var ns = new Array();
	for(var i=0;i<s.length;i++)
	{ 
	
		if( s[i] && s[i].getAttribute("rel").toString().toLowerCase() == "stylesheet"){
	
			
			if( s[i].getAttribute("media") && s[i].getAttribute("media").toString().toLowerCase()=="print" )
			{
				var cs = s[i].cloneNode(true);
				cs.setAttribute("media","screen");
				cs.disabled = false;
				ns[ns.length] = cs;
			}
			else{s[i].disabled=true;}
	 };
	};

		
	 var toolbar = $newNode("div");
	 toolbar.className="print_toolbar";
	 toolbar.id="print_toolbar_id";	
	 var h = "";
	 h+= "<table align='right'><tr><td><label disabled=disabled>此為預覽列印模式，可選擇列印本頁或回前畫面</label></td>";
	 h+= "<td><div class=b1><a href=#  onclick='self.print();return false;'><span>列印本頁</span></a></div></td>";
	 h+= "<td><div class=b2><a href=#  onclick='location.reload();return false;'><span>返回</span></a></div></td>";
	 h+= "</tr><tr><td colspan=5><div class=n1></div></td></tr></table>";
	 toolbar.innerHTML = h;
	 document.body.insertBefore(toolbar,document.body.firstChild);
	 for(var i=0;i<ns.length;i++){document.body.appendChild(ns[i]);};

	 if ($id("ynwsartcontent"))
	 {
		$id("ynwsartcontent").style.fontSize = '13px';
	 }
	 return false;
}