/*****************************************
Code for public Irish Emigrant modules
Created by the Irish Emigrant Webmaster
*****************************************/
var ieModDbgMode=false;
//	if (document.location.href.indexOf("ieModDbg=on")!=-1) ieModDbgMode=true;
 function ieDbgAlert(a) { if (ieModDbgMode==true) alert(a); }
var ieModGiveupAjax=true;	//false;	// override (temp fix for ajax security) (set in script on error)
var ieModGiveupMarquee=false;
var ieModDbgLog="";

function ie_publicAjax(ieAjDest,ieAjURL,doFunc) {
	if (ieAjURL==null || ieAjURL=="") return false;
var ieAjMod=new Object();
ieAjMod.destObj=ieAjDest;
ieAjMod.objXMLHttp=null;

	if (window.XMLHttpRequest) ieAjMod.objXMLHttp=new XMLHttpRequest();
	else if (window.ActiveXObject) ieAjMod.objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");

	if (ieAjMod.objXMLHttp==null) { ieAjDest.innerHTML="Your browser does not support HTTP Requests.<br>Some elements on this page will not work properly."; return false; }

ieAjMod.objXMLHttp.onreadystatechange=function() {
		if (!ieAjMod.objXMLHttp) return false; if (ieAjMod.objXMLHttp==null) return false; if (!ieAjMod.destObj || ieAjMod.destObj==null) return false;		
		if (ieAjMod.objXMLHttp.readyState==4 || ieAjMod.objXMLHttp.readyState=="complete") {
			ieAjMod.destObj.innerHTML=ieAjMod.objXMLHttp.responseText;
			  if (typeof doFunc=="function") doFunc();
		}
	}
 if (ieAjURL.indexOf("?")==-1) ieAjURL+="?"; else if (ieAjURL.substr(ieAjURL.length-1,1)!="&") ieAjURL+="&";
ieAjURL+="sid="+Math.random();

ieAjMod.objXMLHttp.open("GET",ieAjURL,true);
ieAjMod.objXMLHttp.send(null);
} 

////////////////////////////////////////////////
function listen(obj,eventType,detachAfter,callFunc) { try {
	if (obj.addEventListener){ obj.addEventListener(eventType, function(){ callFunc(); if(detachAfter) this.removeEventListener(eventType,arguments.callee,false); }, false); }
	else if (obj.attachEvent){ obj.attachEvent('on'+eventType, function(){ callFunc();	if(detachAfter) obj.detachEvent('on'+eventType,arguments.callee);}); } } catch(e) {} }
 
function getIFrameDoc(frameObj) { try {
	if (frameObj.contentDocument) return frameObj.contentDocument;	// mozilla
	else if (frameObj.contentWindow) return frameObj.contentWindow.document; // IE
	else if (frameObj.document) return frameObj.document;	// old IE?
	else { ieDbgAlert("no doc for frameObj"); }
 } catch(e) { ieDbgAlert("error w/ getIFrameDoc: "+e+"\n"+e.name+"\n"+e.message + "\nObj:"+frameObj + " / " + frameObj.tagName); } 
 return null; }


// put stylesheet when the script loads (before class call):
var ieMod_StylesheetPut=false;

// SET DYNAMIC WIDTH/HEIGHT BY SETTING THESE VARS BEFORE ie_makeModule() call
var ieMod_width="";
var ieMod_height="";

function ieMod_putStylesheet() {
	try {
		var ieMod_StylesheetURL="http://www.irishemigrant.com/ie/publicmods/publicmods.css.asp?width="+ieMod_width+"&height="+ieMod_height;
		var ieMod_ssObj = document.createElement('link');
		ieMod_ssObj.setAttribute("type","text/css");
		ieMod_ssObj.setAttribute("rel","stylesheet",0);
		ieMod_ssObj.setAttribute("href",ieMod_StylesheetURL,0);
		document.getElementsByTagName("head")[0].appendChild(ieMod_ssObj);
		ieMod_StylesheetPut=true;
	} catch(e) { ieDbgAlert("Error putting stylesheet: " + e+"\n"+e.name+"\n"+e.message); }
}

var ieMods_array=new Array();
var ieMod_publicModInd=0;
var ieMod_defaultModType="sports";
var ieMod_fsArray=Array("Live Sports","Ireland","England","Scotland","Wales","European","All");
var ieMod_defaultModSportsParam=ieMod_fsArray[0].toLowerCase();


function ie_makeModule() {	// variable params: modType, modParams/tk, doMarquee [optional]
  try {
	var mod=new Object();
	mod.modInd=ieMods_array.length;
	ieMods_array.push(mod);

	mod.modParams=null;
	mod.tk=null;
	
	// 1st param -- mod type (sports,ent,pub,etc.)
	 if (arguments.length>=1) mod.modType=arguments[0]; else mod.modType=ieMod_defaultModType; 
	 
	 switch(mod.modType) {	// all the possible params for sports box...
		case "sports": case "matches": case "fixtures": case "results":	// no country requested
			mod.modType="sports";
			mod.modParams=ieMod_defaultModSportsParam;
			break;			
		case "england": case "ireland": case "scotland": case "wales": case "european": case "all":	// ~~ "all" is allowed as main param!
			mod.modParams=mod.modType;		// flip vars
			mod.modType="sports"; 
			break;	// (for all these)
			
		case "ent": case "pub":
			break;	// (leave type as is)

		default: // something else
			mod.modType=ieMod_defaultModType;
	 }

		
	// get TK param: (pub,ent,sports)
		if (arguments.length>=2) {
			if (!isNaN(arguments[1])) {
				if (arguments[1]>0) {
					mod.tk=arguments[1];	// only if numeric and valid/non-zero
				}
			}
		}


	// 3rd param -- marquee on/off
	 if (arguments.length>=3) mod.doMarquee=arguments[2]; else mod.doMarquee=true;	// default on
	 if (mod.doMarquee!=true && mod.doMarquee!=false) mod.doMarquee=true;	// if invalid


	 if (document.getElementById("ieModCallScript")) {
		mod.orientObj=document.getElementById("ieModCallScript");
	 } else {	// kluge orienter if script not ID'd
		document.write("<span id='ie_modOrienter_"+mod.modInd+"' style='display:none'></span>");		// orients mod
		mod.orientObj=document.getElementById("ie_modOrienter_"+mod.modInd);		// better way to do this?
	 }
	 
	

	mod.getURL=function() {	//modType,modParams,modTK) {
		 ieDbgAlert(this.modType+" / "+this.modParams+" / "+this.tk);
		 if (!this.tk || this.tk=="undefined") this.tk="";
		
		 switch(this.modType) {
		  case "sports":
			 var fsUrl="http://www.flashscore.com/iframe/sport.php?sport=soccer&";
				switch (this.modParams) {
					case "england": return fsUrl+"category=8&order_fin=y"; break;
					case "ireland": return fsUrl+"category=28&order_fin=y"; break;
					case "scotland": return fsUrl+"category=18&order_fin=y"; break;
					case "wales": return fsUrl+"category=51&order_fin=y"; break;
					case "european": return fsUrl+"category=12&order_fin=y"; break;
					case "all": return fsUrl+"category=&order_fin=y";
					case "live sports": default: 
						if (ieModGiveupAjax) return "http://www.irishemigrant.com/ie/modules/mod-sportslist.asp?widgetIframe=true&tk="+this.tk;
						else return "http://www.irishemigrant.com/ie/modules/mod-sportslist.asp?tk="+this.tk;
				} break;
		  case "pub": return "http://www.irishemigrant.com/ie/modules/mod-pubdetails.asp?tk="+this.tk; break;
		  case "ent": return "http://www.irishemigrant.com/ie/modules/mod-entdetails.asp?tk="+this.tk; break;
		 }
		return null;	// default
		}
		


	mod.URL=mod.getURL();	//ie_getModURL(mod.modType,mod.modParams,mod.tk);
	ieDbgAlert(mod.URL);
		if (mod.URL==null) {	// (probly b/c invalid modType requested)
			ieDbgAlert("no URL for module...(modType: " + mod.modType+")");
			return false;	//error
		}
	
	//ieDbgAlert("modType: "+mod.modType+"\n"+"modParams: "+mod.modParams+"\n"+"doMarquee: "+mod.doMarquee+"\n"+"URL: "+mod.URL);

	//stylesheet:
	  if (!ieMod_StylesheetPut) {		// if not already put in head, put in body
		ieMod_putStylesheet();
		
		/*mod.SS=document.createElement("link");
		mod.SS.setAttribute("id","ieModSS_"+mod.modInd,0);
		mod.SS.setAttribute("type","text/css"); mod.SS.setAttribute("rel","stylesheet",0);
		mod.SS.setAttribute("href",ieMod_StylesheetURL,0);
		mod.orientObj.parentNode.insertBefore(mod.SS,mod.orientObj);
		ieMod_StylesheetPut=true;
		*/
	  }
	
	//outer frame:
	mod.boxObj=document.createElement("div");
	mod.boxObj.setAttribute("id","ieModFrame_"+mod.modInd,0);
	mod.boxObj.className="iePublicModBox";
		//if (mod.modType=="sports") mod.boxObj.style.width="640px";
	mod.orientObj.parentNode.insertBefore(mod.boxObj,mod.orientObj);

	// special flashscore links
		if (mod.modType=="sports") {
			mod.fsLinks=document.createElement("div");
			mod.fsLinks.setAttribute("id","ieModFSLinks_"+mod.modInd,0);
			mod.fsLinks.className="flashscore";
			
				for (fsI=0;fsI<ieMod_fsArray.length;fsI++) {
					mod.fsLinks.innerHTML+="<span onclick=\"ieMods_array["+mod.modInd+"].reload('"+ ieMod_fsArray[fsI].toLowerCase() +"'); ieMods_array["+mod.modInd+"].toggleFSActive();\">"+ieMod_fsArray[fsI]+"</span>";
				}
			
			mod.boxObj.appendChild(mod.fsLinks);
			
			mod.toggleFSActive=function() {	// toggles active FlashScore link box
			 try {
				for(fsI=0; fsI<this.fsLinks.childNodes.length; fsI++) {
					if (this.modParams.toLowerCase()==this.fsLinks.childNodes[fsI].innerHTML.toLowerCase())
						this.fsLinks.childNodes[fsI].className="active";
					else
						this.fsLinks.childNodes[fsI].className="";	// clear others
				}
			 } catch(e) { ieDbgAlert("error finding FS Active: " + e+"\n"+e.name+"\n"+e.message); }
			}
			
			mod.toggleFSActive();	// toggle initial
		}

	//main (inner holder of contents):
	mod.mainObj=document.createElement("div");
	mod.mainObj.setAttribute("id","ieModMain_"+mod.modInd,0);
	mod.mainObj.className="iePublicModMain";
	mod.boxObj.appendChild(mod.mainObj);
	
	// contents:
	mod.contentsObj=document.createElement("div");
	mod.contentsObj.setAttribute("id","ieModContents_"+mod.modInd,0);
	mod.contentsObj.className="iePublicModContents";
	mod.contentsObj.style.display="none";	// default invisible	~~(use visible or display?)
	mod.mainObj.appendChild(mod.contentsObj);

	// ~~ (EITHER IFRAME OR CONTENTSOBJ VISIBLE AT ANY TIME, NEVER BOTH!)
	// iframe
	mod.iframeObj=document.createElement("iframe");
	mod.iframeObj.setAttribute("id","ieModIFrame_"+mod.modInd,0);
	mod.iframeObj.className="iePublicModContents";
	mod.iframeObj.setAttribute("frameBorder","0",0);
	mod.iframeObj.setAttribute("scrolling","auto",0);	//~~
	mod.iframeObj.setAttribute("modInd",mod.modInd,0);
	mod.iframeObj.style.display="none";	// default invisible
	mod.mainObj.appendChild(mod.iframeObj);

	//credits (below contents):
	mod.creditsObj=document.createElement("div");
	mod.creditsObj.setAttribute("id","ieModCredits_"+mod.modInd,0);
	mod.creditsObj.className="iePublicModCredits";
	mod.creditsObj.innerHTML+="<a href='http://www.irishemigrant.com/sports' target='_blank'>USA sports broadcast schedule brought to you by <i>The Irish Emigrant</i></a>.";
	mod.boxObj.appendChild(mod.creditsObj);
	

	//get data (URL set above)
	mod.load=function() {
		  if (mod.URL.toLowerCase().indexOf("irishemigrant")!=-1) mod.method="ajax";	// emigrant content
		  else mod.method="iframe";	// for other sites
		  if (ieModGiveupAjax) mod.method="iframe";	// temporary fix for ajax security problem
		
		  if (mod.method=="iframe") {			
			mod.contentsObj.style.display="none";
			mod.iframeObj.style.display="block";
			
			try{
				listen(mod.iframeObj,"load", true,
				   		function(){		// do when iframe loads... (and detach after running once)
						 try{
							ieDbgAlert("iframe loaded. src: "+mod.iframeObj.src);
							if (mod.doMarquee && !ieModGiveupMarquee) mod.initMarquee(getIFrameDoc(mod.iframeObj));
						 } catch(e) { ieDbgAlert("error w/ iframe load func: " + e+"\n"+e.name+"\n"+e.message); }
						} );
				mod.iframeObj.src=mod.URL;	// should load, then trigger above function
				
			} catch(e) { ieDbgAlert("Error loading iframe: "+e+"\n"+e.name+"\n"+e.message); }
		  }
		  else {	//ajax
		  	try{
				mod.contentsObj.innerHTML="<div class='loadingMsgHolder'><div class='loadingMsg'>Loading ...</div></div>";			
				mod.iframeObj.style.display="none";
				mod.iframeObj.src="about:blank";	// avoid previous iframe contents flashing on new src
				mod.contentsObj.style.display="block";
	
				ie_publicAjax(mod.contentsObj,mod.URL,
						function(){	// do when ajax loads...
						  try{
							if (mod.doMarquee && !ieModGiveupMarquee) mod.initMarquee(mod.contentsObj);
						  } catch(e) { ieDbgAlert("error w/ ajax onload func: " + e+"\n"+e.name+"\n"+e.message); }
						} );
			
			} catch(e) {
				ieDbgAlert("Error w/ ajax process: "+e);
				 try {
					ieModGiveupAjax=true;	// switch to iframe method
					mod.reload();
				 } catch(e) { ieDbgAlert("Error reloading w/ IFrame: " +e); }
			}
		  }
	}	// load()
	
	mod.reload=function(modParams){
		this.modParams=modParams;	// update new params
		this.URL=this.getURL();	//ie_getModURL(this.modType,this.modParams);
		ieDbgAlert("Reloading:\nnew modParams: "+this.modParams+"\nnew URL: "+this.URL+"\nTK still: "+this.tk);
		this.load();
		ieDbgAlert("Reload() done.");
	}
	
	
	// MARQUEE:
	mod.marqueeStep=1;	// pixels
	mod.marqueeIncr=30;	// miliseconds
	mod.marqueePaused=false;	// temporary on/off toggle
	mod.lastMarqueePos=-1;

	mod.pauseMarquee=function() {
		  if (ieModGiveupMarquee) return false;
		mod.marqueePaused=true;
		mod.lastMarqueePos=-1;	// (reset when paused)
	}
	mod.unpauseMarquee=function() {
		  if (ieModGiveupMarquee) return false;
		//setTimeout(function(){mod.marqueePaused=false;}, 500);	// pause before resuming
			///// DELAY CAUSES ALL KINDS OF PROBLEMS -- PROBLY RELATED TO _MOUSEOUT_ BUG /////
		mod.marqueePaused=false;
	}
	
	mod.toggleMarqueeScrollbar=function(tog) {
		if (tog || ieModGiveupMarquee) {	//true=show or not working
			mod.iframeObj.style.overflow="auto";
			mod.contentsObj.style.overflow="auto";	// show scrollbars
		} else {	//false=hide
			mod.iframeObj.style.overflow="hidden";	// hide scrollbars
			mod.contentsObj.style.overflow="hidden";
		}
	   mod.iframeObj.style.overflowX="hidden";	// (X always hidden but gets overridden)
	   mod.contentsObj.style.overflowX="hidden";
	}
	
	
	// (separating seems to work better)
	  if (mod.doMarquee && !ieModGiveupMarquee) {
		listen(mod.boxObj,"mouseover", false, function(){ if (!ieModGiveupMarquee) mod.pauseMarquee(); });
		listen(mod.boxObj,"mouseover", false, function(){ if (!ieModGiveupMarquee)  mod.toggleMarqueeScrollbar(true); });
		listen(mod.boxObj,"mouseout", false, function(){ if (!ieModGiveupMarquee) mod.unpauseMarquee(); });
		listen(mod.boxObj,"mouseout", false, function(){ if (!ieModGiveupMarquee) mod.toggleMarqueeScrollbar(false); });
	  }
		///// WHY IS _MOUSEOUT_ TRIGGERED WHEN MOUSE MOVES INSIDE BOX??? CAUSING LOTS OF PROBLEMS /////
		// SCROLLBAR REAPPEARS IN SCROLL FUNCTION -- AVOID IE FLASHING BUG
	
	mod.initMarquee=function(mObj) {		// return to top and start loop
		try {
			  if (ieModGiveupMarquee) return false;		// if already given up
			ieModGiveupMarquee=true;	// assume not working until it actually is (a few lines down)	
			  if (!mod.doMarquee) return false;
			  if (mObj==null) return false;
			  if (mObj.offsetHeight>=mod.scrollHeight) return false;	// not tall enough to need marquee
			mObj.scrollTop=0;	// return to top
			ieModGiveupMarquee=false;	// if it made it to here
			mod.lastMarqueePos=-1;
			setTimeout(function(){ 
							//mod.toggleMarqueeScrollbar(false);
							mod.scrollMarquee(mObj);
						},300);	// delay for 1st
		} catch(e) { 
			ieModGiveupMarquee=true;
			mod.toggleMarqueeScrollbar(true);
			ieDbgAlert("Error w/ initMarquee: " + e+"\n"+e.name+"\n"+e.message);
		}
	}
		
	mod.scrollMarquee=function(mObj) {
		try {
				if (!mod.marqueePaused) {
					mod.toggleMarqueeScrollbar(false);	// hide scrollbar
					mod.lastMarqueePos=mObj.scrollTop;
					mObj.scrollTop+=mod.marqueeStep;
					
					if (mod.lastMarqueePos==mObj.scrollTop && mod.lastMarqueePos!=-1) {	// haven't moved (at bottom)	//&& mObj.scrollTop!=0
						mod.lastMarqueePos=-1;
						setTimeout( function(){ mod.initMarquee(mObj) }, 300);	// pause 1 second, then go back to top
						return false;	// (stop regular timer)
					}				
				}
			//document.getElementById("specDbg").innerHTML="top: "+mObj.scrollTop+"<br>height: "+mObj.scrollHeight + "<br>offset: "+mObj.offsetHeight+"<br>last: "+mod.lastMarqueePos;
			
			mTimer=setTimeout(function(){mod.scrollMarquee(mObj)},mod.marqueeIncr);

		} catch(e) { ieDbgAlert("Error w/ scrollMarquee: " + e+"\n"+e.name+"\n"+e.message); }
	}

	// auto-load new modules:
	mod.load();

  } catch(e) { ieDbgAlert("error creating module: "+e+"\n"+e.name+"\n"+e.message); }
  finally { if (ieModDbgLog!="" && ieModDbgMode) ieDbgAlert("Debug Log:\n"+ieModDbgLog); }
  
  return mod;
}