
function popUp(URL) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=450,height=575,left = 312,top = 234');");
}

/**************************************************************/

//var delay = 2000
var timeoutIds=Array()
var visibleDiv=Array()
var visDivTimeoutIds=Array()
var menuNames=Array("nationalDiv", "chapterDiv", "photosDiv")

function startHideMenuTimer(menu) {              
	var timeoutId=setTimeout("hideMenu('"+menu+"')", 2000)
	timeoutIds[menu]=timeoutId	
	
timeoutId=setTimeout("resetDivVisibility('"+menu+"')", 2000)
	visDivTimeoutIds[menu]=timeoutId

}

function resetMenuLocations() {
	for(i=0; i<menuNames.length; i++) {
		var altMenu=menuNames[i]
		if(visibleDiv[altMenu] == false) {
			clearTimeout(visDivTimeoutIds[altMenu])
			clearTimeout(timeoutIds[altMenu])
			var style=document.getElementById(altMenu).style

			if(style.top != 0) {
				style.top="0px"
			}
		}
	}
}

function stopHideMenuTimer(menu) {
	clearTimeout(timeoutIds[menu])
	timeoutIds.slice(timeoutIds[menu], 1)
	
	clearTimeout(visDivTimeoutIds[menu])
	visDivTimeoutIds.slice(visDivTimeoutIds[menu], 1)
}

var searchParams = ""
function updateParams(params) {
	searchParams = params
}

function doSearch() {
	window.location.href="http://www.smlnupes.org/search.htm?params="+searchParams
}

function showAltMenuOptions(option, parent) {
	showMenu(parent)
	hideOtherAltMenuOptions(option)
	document.getElementById(option).style.display="block"
}

var altMenuOpts=Array("historyOpts", "officersOpts")
var altMenuOptTimeIds = Array()
function hideOtherAltMenuOptions(currentOption) {
	for(var opts in altMenuOpts){
		clearTimeout(altMenuOptTimeIds[altMenuOpts[opts]])
		
		if(altMenuOpts[opts] == currentOption){}
		else {
			document.getElementById(altMenuOpts[opts]).style.display="none"
		}
	}
}

function hideAltMenuOptions(option) {
	altMenuOptTimeIds[option]=setTimeout("hideAltMenu('"+option+"')", 1000)
}

function resetDivVisibility(divName) {
	visibleDiv[divName]=false
}

function hideAltMenu(menu) {
	document.getElementById(menu).style.display="none"
}

function hideAlternateMenus(currentMenu) {
	
	for(i=0; i<menuNames.length; i++) {
		var altMenu=menuNames[i]
		if(altMenu != currentMenu) {
			if(visibleDiv[altMenu]) {	
				clearTimeout(visDivTimeoutIds[altMenu])
				clearTimeout(timeoutIds[altMenu])
				
				hideMenu(altMenu)
				visibleDiv[altMenu]=false
	
			}
		}
	}
}

function hideMenu(menu) {
	slide(menu, 0, -191, 100, true)
	setTimeout("resetMenuLocations()", 200)
}

function showMenu(menu) {	
	stopHideMenuTimer(menu)
	hideAlternateMenus(menu)	
	
	displayMenu(menu)
}

function displayMenu(menu) {
	var top=document.getElementById(menu).style.top.replace(/px/, "") * 1
	if(!visibleDiv[menu] && (top < 192)) {
		slide(menu, 0, 191, 500, true)
		visibleDiv[menu]=true
		return true
	}
	
	return false
}

var newWindow;
function openWindow(urlLink)
{
	var width = 300;
	var height = 280;
	var left = parseInt((screen.availWidth/2) - (width/2));
	var top = parseInt((screen.availHeight/2) - (height/2));
	var windowFeatures = "width=" + width + ", height=" + height +
						  ",status,resizeable=0,scrollbars=0,toolbar=0, left=" + left + ",top=" + top +
						  ",screenX=" + left + ",screenY=" + top;

	newWindow = window.open(urlLink, "subWind", windowFeatures);
	newWindow.focus();

	return true;
}

function openTeaser(urlLink, height, width)
{
	var left = parseInt((screen.availWidth/2) - (width/2));
	var top = parseInt((screen.availHeight/2) - (height/2));
	var windowFeatures = "width=" + width + ", height=" + height +
						  ",status,resizeable=0,scrollbars=0,toolbar=0, left=" + left + ",top=" + top +
						  ",screenX=" + left + ",screenY=" + top;

	newWindow = window.open(urlLink, "subWind", windowFeatures);
	newWindow.focus();

	return true;
}

function getUrlParameter(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function eventsType(){
	showDivFromUrl("eventsType", "upcomingEvents");
}

function lineage() {
	showDivFromUrl("lineage", "kskop");
}

function showDivFromUrl(divName, defaultDiv) {
	var param = getUrlParameter(divName);
	if(param=="") {
		param=defaultDiv;
	}
	
	swapLineage(param)
}

function swapLineage(lineage) {
	changeOpac(0, 'kskr')
	changeOpac(0, 'kskop')
	changeOpac(0, 'ksfivekkk')
	changeOpac(0, 'ksthreekkk')
	changeOpac(0, 'ksanine')
	changeOpac(0, 'ksan')
	changeOpac(0, 'kseh')
	changeOpac(0, 'ksditr')
	changeOpac(0, 'ksco')
	
	opacity(lineage, 0, 100, 500)
}

function opacity(id, opacStart, opacEnd, millisec) {
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}

var fps = 40;
function slide(eleId, varX, varY, transTime, firstCall, beginX, beginY) {
	
	var oDiv = document.getElementById(eleId);
	var approxSteps = fps * (transTime / 1000);
	var delay = transTime / approxSteps;
	var sinInc = (Math.PI/2) / approxSteps;
		
	if(firstCall) {
		j = 0;
		beginX = oDiv.style.left.replace(/px/, "") * 1;
		beginY = oDiv.style.top.replace(/px/, "") * 1;
	}
	
	if (j <= approxSteps) {
		var posX = beginX + Math.ceil(Math.sin(j * sinInc) * varX);
		var posY = beginY + Math.ceil(Math.sin(j * sinInc) * varY);
		oDiv.style.left = posX + "px";
		oDiv.style.top = posY + "px";
		j++;
		setTimeout("slide('" + eleId + "', " + varX + ", " + varY + ", " + transTime + ", " + false + ", " + beginX + ", " + beginY + ")", delay);
	} else {
		return;
	}
}

var provincesShown=false
var provincesFirst=true
function showHideProvinces() {
	if(provincesShown) {
		slide('provinceList', 0, -340, 100, true)
		provincesShown=false
		return
	} 
	
	if(provincesFirst) {
		slide('provinceList', 0, 200, 1000, true)
		provincesShown=true
		provincesFirst=false
		return
	}
	
	slide('provinceList', 0, 340, 1000, true)
	provincesShown=true
	
}

var signUpShown=false
var signUpFirstShow=true
function showSignUp() {
	if(signUpShown) {
		slide('signUpSheet', 2, -177, 500, true)
		signUpShown=false
		return
	}
	
	if(signUpFirstShow) {
		slide('signUpSheet', 2, 191, 500, true)
		signUpShown=true
		signUpFirstShow=false
		return
	}
	
	slide('signUpSheet', 2, 177, 500, true)
	signUpShown=true

}

//eNotification fileds
var firstName=String("")
var lastName=String("")
var email=String("")
function updateField(field, value) {
	if(field == "fName") {
		firstName=value
	} else if(field == "lName") {
		lastName=value
	} else {
		email=value
	}
}
function cancelENotice() {
	slide('signUpSheet', 2, -177, 500, true)
	signUpShown=false
}

function submitProceed() {
	submitENoticeGallery()
}

function waitForResponseToProceed() {
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { 
		window.location = "http://www.smlnupes.org/photoAlbum/main.php?g2_itemId=25"
	}
}

var xmlHttp
function submitENoticeGallery(){
	if(!validateENoticeFields()) {
		document.getElementById("signUpResponse").innerHTML="Error: Some fields contain invalid entries."
		return
	}
	
	xmlHttp=GetXmlHttpObject()
	
	if (xmlHttp==null) {
  		alert ("Browser does not support HTTP Request")
		return
  	} 

	var url="http://www.smlnupes.org/scripts/eventsSignUp.php?fName=" + firstName + "&lName=" + lastName + "&email=" + email + "&sid=" + Math.random()

	xmlHttp.onreadystatechange=waitForResponseToProceed  
	xmlHttp.open("GET",url,true)
	xmlHttp.send(null)
}

function submitENotice(){
	if(!validateENoticeFields()) {
		document.getElementById("signUpResponse").innerHTML="Error: Some fields contain invalid entries."
		return
	}
	
	xmlHttp=GetXmlHttpObject()
	
	if (xmlHttp==null) {
  		alert ("Browser does not support HTTP Request")
		return
  	} 

	var url="http://www.smlnupes.org/scripts/eventsSignUp.php?fName=" + firstName + "&lName=" + lastName + "&email=" + email + "&sid=" + Math.random()

	xmlHttp.onreadystatechange=updateENotification  
	xmlHttp.open("GET",url,true)
	xmlHttp.send(null)
}

function updateENotification() {
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { 
		document.getElementById("signUpResponse").innerHTML=xmlHttp.responseText
	}
}

function performWait() {
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { 
	}
}

function GetXmlHttpObject()
{
	var xmlHttp=null;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	 } catch (e) {
		 // Internet Explorer
		 try {
			  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		  } catch (e) {
			  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		  }
	}
	return xmlHttp;
}

function isEmailAddr(email) {
	var address = email;
	var checkFor = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
	
	if (!address.match(checkFor))
		return false;
	
	return true;
}


function validateENoticeFields(){
	
	if (firstName.length < 4) {
		return false;
	}
		
	if (lastName.length < 4) {
		return false;
	}
			
	if (email.length < 4) {
		return false;
	}
	
	if (!isEmailAddr(email)) {
		return false;
	}
			
	return true; 			
}

function showPage(number) {
	switch(number) {
		case 1:
			document.getElementById("natlHisPageOne").style.display = "block"
			document.getElementById("natlHisPageTwo").style.display = "none"
			document.getElementById("natlHisPageThree").style.display = "none"
			document.getElementById("natlHisPageFour").style.display = "none"
			document.getElementById("natlHisPageFive").style.display = "none"
			document.getElementById("natlHisPageSix").style.display = "none"
			break
		case 2:
			document.getElementById("natlHisPageOne").style.display = "none"
			document.getElementById("natlHisPageThree").style.display = "none"
			document.getElementById("natlHisPageTwo").style.display = "block"
			document.getElementById("natlHisPageFour").style.display = "none"
			document.getElementById("natlHisPageFive").style.display = "none"
			document.getElementById("natlHisPageSix").style.display = "none"
			break				
		case 3:
			document.getElementById("natlHisPageOne").style.display = "none"
			document.getElementById("natlHisPageTwo").style.display = "none"
			document.getElementById("natlHisPageThree").style.display = "block"
			document.getElementById("natlHisPageFour").style.display = "none"
			document.getElementById("natlHisPageFive").style.display = "none"
			document.getElementById("natlHisPageSix").style.display = "none"
			break
		case 4:
			document.getElementById("natlHisPageOne").style.display = "none"
			document.getElementById("natlHisPageTwo").style.display = "none"
			document.getElementById("natlHisPageThree").style.display = "none"
			document.getElementById("natlHisPageFour").style.display = "block"
			document.getElementById("natlHisPageFive").style.display = "none"
			document.getElementById("natlHisPageSix").style.display = "none"
			break				
			
		case 5:
			document.getElementById("natlHisPageOne").style.display = "none"
			document.getElementById("natlHisPageTwo").style.display = "none"
			document.getElementById("natlHisPageThree").style.display = "none"
			document.getElementById("natlHisPageFour").style.display = "none"
			document.getElementById("natlHisPageFive").style.display = "block"
			document.getElementById("natlHisPageSix").style.display = "none"
			break				
			
		case 6:
			document.getElementById("natlHisPageOne").style.display = "none"
			document.getElementById("natlHisPageTwo").style.display = "none"
			document.getElementById("natlHisPageThree").style.display = "none"
			document.getElementById("natlHisPageFour").style.display = "none"
			document.getElementById("natlHisPageFive").style.display = "none"
			document.getElementById("natlHisPageSix").style.display = "block"
			break				
	}
}

// JavaScript Document
function sendComment() {
	form = document.getElementById('sendComment')
	name = form.formName.value
	email = form.formEmail.value
	comment = form.formComment.value
	inquiryType = form.inquiryType.value

	if(validate(email) && (name.length >= 4) && (name.length < 25) && (comment.length > 4)) {
		comment = comment.replace(/&amp;/g, "and")
		comment = comment.replace(/&/g, "and")
		comment = comment.replace(/\n/g, "<br />")
		parameters = "name="+name+"&email="+email+"&comment="+comment+ "&inquiryType="+inquiryType
		validationString = hex_sha1(addslashes(parameters))
		parameters = parameters+"&validation="+validationString
		document.getElementById('formResponse').innerHTML = "&nbsp;Sending...&nbsp;"
		sendRequest(parameters)
	} else {
		document.getElementById('formResponse').innerHTML = "&nbsp;Please enter a valid information in all fields!&nbsp;"
	}
	
}

function addslashes(str) {
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\0/g,'\\0');
	return str;
}

function validate(address) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   if(reg.test(address) == false) {
	  return false;
   }
   
   return true
}

function updateBody() {
	if (http_request.readyState==4 || http_request.readyState=="complete") { 
		document.getElementById('formResponse').style.color = '#CC3300'
		document.getElementById('formResponse').innerHTML = http_request.responseText
	}
}
	
function sendRequest(parameters) {	
  http_request = false;
  url = "lib/email.php"
  
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
	 http_request = new XMLHttpRequest();
	 if (http_request.overrideMimeType) {
		// set type accordingly to anticipated content type
		//http_request.overrideMimeType('text/xml');
		http_request.overrideMimeType('text/html');
	 }
  } else if (window.ActiveXObject) { // IE
	 try {
		http_request = new ActiveXObject("Msxml2.XMLHTTP");
	 } catch (e) {
		try {
		   http_request = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {}
	 }
  }
  
  if (!http_request) {
	 alert('Cannot create XMLHTTP instance');
	 return false;
  }
  
  http_request.onreadystatechange = updateBody;
  http_request.open('POST', url, true);
  http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http_request.setRequestHeader("Content-length", parameters.length);
  http_request.setRequestHeader("Connection", "close");
  http_request.send(parameters);
}



/*
 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
 * in FIPS PUB 180-1
 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for details.
 */

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}

/*
 * Perform a simple self-test to see if the VM is working
 */
function sha1_vm_test()
{
  return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

/*
 * Calculate the SHA-1 of an array of big-endian words, and a bit length
 */
function core_sha1(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << (24 - len % 32);
  x[((len + 64 >> 9) << 4) + 15] = len;

  var w = Array(80);
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
  var e = -1009589776;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;

    for(var j = 0; j < 80; j++)
    {
      if(j < 16) w[j] = x[i + j];
      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
      var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
      e = d;
      d = c;
      c = rol(b, 30);
      b = a;
      a = t;
    }

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
    e = safe_add(e, olde);
  }
  return Array(a, b, c, d, e);

}

/*
 * Perform the appropriate triplet combination function for the current
 * iteration
 */
function sha1_ft(t, b, c, d)
{
  if(t < 20) return (b & c) | ((~b) & d);
  if(t < 40) return b ^ c ^ d;
  if(t < 60) return (b & c) | (b & d) | (c & d);
  return b ^ c ^ d;
}

/*
 * Determine the appropriate additive constant for the current iteration
 */
function sha1_kt(t)
{
  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
         (t < 60) ? -1894007588 : -899497514;
}

/*
 * Calculate the HMAC-SHA1 of a key and some data
 */
function core_hmac_sha1(key, data)
{
  var bkey = str2binb(key);
  if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
  return core_sha1(opad.concat(hash), 512 + 160);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert an 8-bit or 16-bit string to an array of big-endian words
 * In 8-bit function, characters >255 have their hi-byte silently ignored.
 */
function str2binb(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
  return bin;
}

/*
 * Convert an array of big-endian words to a string
 */
function binb2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
  return str;
}

/*
 * Convert an array of big-endian words to a hex string.
 */
function binb2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of big-endian words to a base-64 string
 */
function binb2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

