﻿var m_serverDateTime = null;
var m_calWindow = null;

window.onload = function ()
{
	window.status = "Loading...";
	var dateNow = new Date()
    AJAXGet("SplashData.aspx?ver=" + dateNow.format("yyyymmddhMs"), RenderSplashData);

         
	$("#login").attr("href", "https://" + document.domain + "/GEPS/log-in.aspx");  

    var TablePageFoot = document.getElementById("TablePageFoot");

    if (document.body.offsetHeight<=TablePageFoot.offsetTop)
    {
		TablePageFoot.style.height ='60';
		TablePageFoot.height = '60';
    }
	
}

function ShowDateTime()
{
    m_serverDateTime = new Date(m_serverDateTime-(-1000));
    $("#spDate").html(m_serverDateTime.format("dddd, mmmm d, yyyy")); 
    $("#spClock").html(m_serverDateTime.format("hh:MM TT")); 
    setTimeout(ShowDateTime,1000);
    $("#spYear").html(m_serverDateTime.format("yyyy")); 
}

function RenderSplashData(xml)
{
	$(xml).find("splashData").each(function()
	{
		RenderWelcomeMessage($(this));
		RenderMarquee($(this)); 
		RenderAnnouncements($(this)); 
		RenderStatistics($(this)); 
		RenderOpenOpportunities($(this));
		RenderRecentAwards($(this)); 
		RenderDateTime($(this));
		RenderCalendar(); 
		RenderEvents($(this));            
		$("#splashPage").show();
	});

	xml = null;
	window.status = "Done";
}

function RenderDateTime(xml)
{
	var serverDateTime = xml.find("serverDateTime").text().split(' '); 
	var serverDate = serverDateTime[0].split('-');
	var serverTime = serverDateTime[1].split(':');
	m_serverDateTime = new Date();
	m_serverDateTime.setFullYear(parseInt(serverDate[2]), parseInt(serverDate[0]) - 1, parseInt(serverDate[1]));
	m_serverDateTime.setHours(parseInt(serverTime[0]));
	m_serverDateTime.setMinutes(parseInt(serverTime[1])); 
	m_serverDateTime.setSeconds(parseInt(serverTime[2]));               
	ShowDateTime();
}

function RenderWelcomeMessage(xml)
{
	 xml.find('welcomeMessages').each(function()
	 {
		 document.getElementById("WelcomMessageLabel").innerHTML = $(this).find('Description').text();
	 });
}

function RenderMarquee(xml)
{
	 xml.find('specialMessage').each(function()
	 {
		if ($(this).find('Description') != null && $(this).find('Description').text() != '')
		{
			$("#Marquee1").show();            
			document.getElementById("SpecialMessage").innerHTML = $(this).find('Description').text();
		}
	 }); 
}

function RenderAnnouncements(xml)
{
	 xml.find('announcement').each(function(index)
	 {
		var id = index + 1; 
		if (id < 3)
		{
			document.getElementById("AnnouncementTitle" + id).innerHTML = $(this).find('Title').text(); 
			document.getElementById("AnnouncementSummary" + id).innerHTML = $(this).find('Summary').text();  
			$("#AnnounFull" + id).attr("href", "/GEPS/announcement/an_viewDetail.aspx?an_id=" + $(this).find('AnnouncementID').text());
			$("#AnnounFull" + id).show(); 
		}
		else if (id > 2)
		{
			$("#LinkMore").show();
		}
	 });
}

function RenderStatistics(xml)
{
	 xml.find('organizationInfo').each(function()
	 {
		$("#RegisteredAgencies").html(FormatInteger($(this).find('registeredAgencies').find('amount').text())); 
		$("#RegisteredSuppliers").html(FormatInteger($(this).find('registeredSuppliers').find('amount').text())); 
	 });

	 xml.find('opportunitiesInfo').each(function()
	 {
		$("#OOP_Pro").html(FormatInteger($(this).find('opportunitiesProcessed').find('amount').text())); 
		$("#OOP_Cur").html(FormatInteger($(this).find('currentOpportunities').find('amount').text()));    
	 });
}

function RenderEvents(xml)
{
    var currentMonth = m_serverDateTime.getMonth() + 1;
    var currentYear = m_serverDateTime.getFullYear(); 
    var currentDate = m_serverDateTime.getDate(); 
    var monthEvents = null;
    var dayEvents = null;  
    var day = ""; 
    var eventContent = new StringBuilder(); 
    var tdCalDay = null;
	
	 xml.find('monthEvents').each(function(index)
	 {
		monthEvents = $(this); 
		if (parseInt(monthEvents.attr("month")) == currentMonth)
		{
			monthEvents.find('dayEvents').each(function(index2)
			{                  
				dayEvents = $(this);
				day = dayEvents.attr("day");
				eventContent.Clear();
			tdCalDay = $("#tdCalDay" + day);
				if (parseInt(day) == currentDate)
				{
					tdCalDay.attr("class", "calendarDays");
		eventContent.Append('<a class="calendarDaysToday calendarDaysEvent" href="javascript: if(m_calWindow!=null) m_calWindow.close();  void(m_calWindow = window.open(&quot;/GEPS/calendar.aspx?day=');
				}
				else
				{
					eventContent.Append('<a class="calendarDaysEvent" href="javascript: if(m_calWindow!=null) m_calWindow.close();  void(m_calWindow = window.open(&quot;/GEPS/calendar.aspx?day=');
				}
				eventContent.Append(currentMonth);
				eventContent.Append('/');
				eventContent.Append(day);
				eventContent.Append('/');
				eventContent.Append(currentYear);
				eventContent.Append(' 12:00:00 AM&quot;, &quot;EventWindow&quot;, &quot;toolbar=no,menubar=no,directories=no,status=no,width=350,height=280,scrollbars=yes&quot;));" >');
				eventContent.Append(day);
				eventContent.Append('</a>');
				//tdCalDay.html(eventContent.ToString());
				document.getElementById("tdCalDay" + day).innerHTML = eventContent.ToString();
			});
		} 
	 });
	 
	eventContent.Dispose();
    currentMonth = null;
    currentYear = null; 
    currentDate = null; 
    monthEvents = null;
    dayEvents = null;  
    day = null; 
    eventContent = null; 
    tdCalDay = null;	
}

function RenderOpenOpportunities(xml)
{
	var openOpps = xml.find('OOP').find('OOP');
	
	if (openOpps.length > 0)
	{ 
		var content = new StringBuilder('<tr class="GridHeader1"><td>&nbsp;</td><td align="Center">Category</td><td align="Center" style="width:37%;">No. of Opportunities</td></tr>');
		var rowClass = "";
		var oppCount = 0; 
		var counter = 0;
		var oppName = ""; 
		openOpps.each(function(index)
		{
			if (counter == 20)
			{
				return; 
			}  
			
			if(index % 2 == 0)
			{
			   rowClass = "GridAltItem";
			}
			else
			{
			   rowClass = "GridItem";
			}
			
			oppName = $(this).find('BusCat').text();
		   
			if (oppName.length > 30)
			{
				 oppName = oppName.substr(0,27)  + '...';
			} 
			
			oppCount = parseInt($(this).find('Count').text());
			content.Append('<tr class=');
			content.Append(rowClass);
			content.Append('>');
			content.Append('<td align="Center">');
			content.Append(index + 1);
			content.Append('</td>');
			content.Append('<td>');
			content.Append(oppName);
			content.Append('</td>');
			if (oppCount == 0)
			{
				content.Append('<td align="Right">0</td>'); 
			}
			else
			{     
				content.Append('<td align="Right"><a href="/GEPS/Tender/SplashOpportunitiesSearchUI.aspx?ClickFrom=OpenOpp&Type=splashCategory&BusCatID=');
				content.Append($(this).find('BusCatID').text());
				content.Append('&menuIndex=3">');
				content.Append(oppCount);
				content.Append('</a></td>');
			}
			
			content.Append('</tr>');
			counter++; 
		});
	   
		if (openOpps.length > 20)
		{
			$("#OOP_More").show();
		}
		else
		{
			 $("#OOP_More").hide();
		}  
		 
		//$("#OOP").html(content.ToString());
		document.getElementById("OOP").innerHTML = "<table cellspacing='1' cellpadding='4' border='0' style='width:100%;'>" + content.ToString() + "</table>";
		content.Dispose();
		content = null;
		rowClass = null;
		oppCount = null; 
		counter = null;
		oppName = null; 
	}

	openOpps = null;	
}

function RenderRecentAwards(xml)
{
	var recentAwards = xml.find('Award');
	
	if (recentAwards.length > 0)
	{ 
		var content = new StringBuilder('<tr class="GridHeader1"><td>&nbsp;</td><td align="Center">Title</td><td align="Center" style="width:30%;">Amount (PHP)</td></tr>');
		var rowClass = "";
		var awardTitle = ""; 
		var counter = 0; 
		recentAwards.each(function(index)
		{
			if (counter == 20)
			{
				return; 
			}  
			
			if(index % 2 == 0)
			{
			   rowClass = "GridAltItem";
			}
			else
			{
			   rowClass = "GridItem";
			}
			
			awardTitle = $(this).find('AwardTitle').text();
		   
			if (awardTitle.length > 30)
			{
				 awardTitle = awardTitle.substr(0,27)  + '...';
			}  
			  
			content.Append('<tr class=');
			content.Append(rowClass);
			content.Append('>');
			content.Append('<td align="Center">');
			content.Append(index + 1);
			content.Append('</td>');
			content.Append('<td><a href="/GEPS/Tender/SplashAwardNoticeAbstractUI.aspx?AwardID=');
			content.Append($(this).find('AwardID').text());
			content.Append('&DirectFrom=SplashPage&menuIndex=3">');
			content.Append(awardTitle);
			content.Append('</a><FONT face=&#23435;&#20307;></FONT></td>');
			content.Append('<td align="Right">');
			content.Append(FormatFloat($(this).find('ContractAmt').text()));
			content.Append('</td>');
			content.Append('</tr> ');
			counter++; 
		});
	   
		if (recentAwards.length > 20)
		{
			$("#Award_More").show();
		}
		else
		{
			 $("#Award_More").hide();
		}  
		 
		//$("#Award").html(content.ToString());
		document.getElementById("Award").innerHTML = "<table cellspacing='1' cellpadding='4' border='0'  style='width:100%;'>" + content.ToString() + "</table>";
		content.Dispose();
		content = null;
		rowClass = null;
		awardTitle = null; 
		counter = null; 
	}          
	
	recentAwards = null;
}

function AJAXGet(url, successCallback)
{
    $.ajax(
    {
        type: "GET",
        url: url,
        dataType: "xml",
        success: successCallback
     });    
}

function RenderCalendar()
{
    var calendarDate = new Date();
    calendarDate.setFullYear(m_serverDateTime.getFullYear(), m_serverDateTime.getMonth(), 1);
    var calendarContent = new StringBuilder();
   
    //Month & Year
    calendarContent.Append('<tr class="calendarHeader">');
	calendarContent.Append('<td nowrap="nowrap" colspan="7" >');
	calendarContent.Append(calendarDate.format("mmmm"));
	calendarContent.Append('&nbsp;&nbsp;');
	calendarContent.Append(calendarDate.format("yyyy"));
	calendarContent.Append('</td>');
    calendarContent.Append('</tr>'); 
   
    //Weekday Header
    calendarContent.Append('<tr class="calendarWeekHeader">');
    calendarContent.Append('<td nowrap="nowrap" >Sun</td>');
	calendarContent.Append('<td nowrap="nowrap" >Mon</td>');
	calendarContent.Append('<td nowrap="nowrap" >Tue</td>');
	calendarContent.Append('<td nowrap="nowrap" >Wed</td>');
	calendarContent.Append('<td nowrap="nowrap" >Thu</td>');
	calendarContent.Append('<td nowrap="nowrap" >Fri</td>');
	calendarContent.Append('<td nowrap="nowrap" >Sat</td>');
    calendarContent.Append('</tr>');
    calendarContent.Append('<tr class="calendarDays" >'); 
   
    //Days
    var lastDay = new Date(); 
    lastDay.setFullYear(calendarDate.getFullYear(), calendarDate.getMonth() + 1, 0); 
    var weekdayCtr = 0; 
    var tdClass = "";
    var date = 0; 
    var currentDate = m_serverDateTime.getDate();
    while (calendarDate <= lastDay)
    {
        date = calendarDate.getDate();
        if (weekdayCtr == 7)
        {
            calendarContent.Append('</tr>'); 
            calendarContent.Append('<tr class="calendarDaysRow">');
            weekdayCtr = 0; 
        }  
        
        if (calendarDate.getDay() == weekdayCtr)
        { 
            if (date == currentDate)
            {
                tdClass = "calendarDays calendarDaysToday"; 
            }
            else
            {    
                tdClass = "calendarDays"; 
            } 
            
            calendarContent.Append('<td id="tdCalDay');
            calendarContent.Append(date);
            calendarContent.Append('" nowrap="nowrap" class="');
            calendarContent.Append(tdClass);
            calendarContent.Append('" >');
            calendarContent.Append(date);
            calendarContent.Append('</td>'); 
            calendarDate.setDate(date + 1); 
        }
        else
        {
             calendarContent.Append('<td nowrap="nowrap">&nbsp;</td>');
        }   
       
        weekdayCtr++;          
    } 
   
    //Navigator
    
    var previousMonth = new Date();
    previousMonth.setFullYear(m_serverDateTime.getFullYear(), m_serverDateTime.getMonth() - 1, m_serverDateTime.getDate());
    previousMonth.setHours(m_serverDateTime.getHours());
    previousMonth.setMinutes(m_serverDateTime.getMinutes()); 
    previousMonth.setSeconds(m_serverDateTime.getSeconds()); 

    var nextMonth = new Date();
    nextMonth.setFullYear(m_serverDateTime.getFullYear(), m_serverDateTime.getMonth() + 1, m_serverDateTime.getDate());
    nextMonth.setHours(previousMonth.getHours());
    nextMonth.setMinutes(previousMonth.getMinutes()); 
    nextMonth.setSeconds(previousMonth.getSeconds()); 

    calendarContent.Append('<tr class="calendarNavRow" >');
	calendarContent.Append('<td colspan="7" class="calendarNav" =>');
	calendarContent.Append('<a class="link4" href="javascript: if(m_calWindow!=null) m_calWindow.close();  void(m_calWindow = window.open(&quot;/GEPS/calendar_prev.aspx?month=' + previousMonth.format('m/d/yyyy h:M:s TT') + '&quot;, &quot;EventWindow&quot;, &quot;toolbar=no,menubar=no,directories=no,status=no,width=350,height=280,scrollbars=yes&quot;));" style="font-size:7pt;" >&lt;&lt;&lt;</a>');
	calendarContent.Append('<span>&nbsp;&nbsp;</span>');
	calendarContent.Append('<span>|</span>');
	calendarContent.Append('<span>&nbsp;&nbsp;</span>');
	calendarContent.Append('<a class="link4" href="javascript: if(m_calWindow!=null) m_calWindow.close(); void(m_calWindow = window.open(&quot;/GEPS/calendar_nex.aspx?month=' + nextMonth.format('m/d/yyyy h:M:s TT') + '&quot;, &quot;EventWindow&quot;, &quot;toolbar=no,menubar=no,directories=no,status=no,width=350,height=280,scrollbars=yes&quot;));" style="font-size:7pt;" >&gt;&gt;&gt;</a>');
	calendarContent.Append('</td>');
    calendarContent.Append('</tr>');  
   
	//$("#Calendar").html(calendarContent.ToString()); 
    document.getElementById("Calendar").innerHTML = "<table  class='calendarTable' border='0' >" + calendarContent.ToString() + "</table>"; 
	calendarContent.Dispose();
	
	lastDay = null;
    weekdayCtr = null; 
    tdClass = null;
    date = null; 
    currentDate = null;
	
	calendarContent = null;
	calendarDate = null;
}

function ShowContactUs(path)
{
    window.open(path,"view1", "resizable=no,toolbar=no,menubar=no,directories=no,status=no,width=600,height=600,scrollbars=yes");
	return false;
 }

function FormatInteger(value)
{
	var num = value;
	if (isNaN(parseInt(num)))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num * 100 + 0.50000000001);
	num = Math.floor(num / 100).toString();
	for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
		num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));

	var returnValue = (((sign) ? "" : "-") + num);
	return returnValue;
}

function FormatFloat(value)
{
	var num = value;
	if (isNaN(parseFloat(num)))
		num = "0.00";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num * 100 + 0.50000000001);
	cents = num % 100;
	num = Math.floor(num / 100).toString();
	if (cents < 10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
		num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));

	var returnValue = (((sign) ? "" : "-") + num + "." + cents);
	return returnValue;
}

//-------- Stringbuilder Class -------------

// Initializes a new instance of the StringBuilder class
// and appends the given value if supplied
function StringBuilder(value)
{
	this.strings = new Array("");
	this.Append(value);
}

// Appends the given value to the end of this instance.
StringBuilder.prototype.Append = function (value)
{
	if (value)
	{
		this.strings.push(value);
	}
}

// Clears the string buffer
StringBuilder.prototype.Clear = function ()
{
	this.strings.length = 1;
}

// Converts this instance to a String.
StringBuilder.prototype.ToString = function ()
{
	return this.strings.join("");
}

// Dispose objects
StringBuilder.prototype.Dispose = function ()
{
	this.strings.length = 0;
	this.strings = null;
}

/*
How to use:

var sb = new StringBuilder();

sb.Append("Test");
sb.Append("Test2");

var sbResult = sb.ToString();
*/

//-------- Stringbuilder Class ------------- 

//For DATE/TIME format
var dateFormat = function () {
	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
		timezoneClip = /[^-+\dA-Z]/g,
		pad = function (val, len) {
			val = String(val);
			len = len || 2;
			while (val.length < len) val = "0" + val;
			return val;
		};

	// Regexes and supporting functions are cached through closure
	return function (date, mask, utc) {
		var dF = dateFormat;

		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
		if (arguments.length == 1 && (typeof date == "string" || date instanceof String) && !/\d/.test(date)) {
			mask = date;
			date = undefined;
		}

		// Passing date through Date applies Date.parse, if necessary
		date = date ? new Date(date) : new Date();
		if (isNaN(date)) throw new SyntaxError("invalid date");

		mask = String(dF.masks[mask] || mask || dF.masks["default"]);

		// Allow setting the utc argument via the mask
		if (mask.slice(0, 4) == "UTC:") {
			mask = mask.slice(4);
			utc = true;
		}

		var	_ = utc ? "getUTC" : "get",
			d = date[_ + "Date"](),
			D = date[_ + "Day"](),
			m = date[_ + "Month"](),
			y = date[_ + "FullYear"](),
			H = date[_ + "Hours"](),
			M = date[_ + "Minutes"](),
			s = date[_ + "Seconds"](),
			L = date[_ + "Milliseconds"](),
			o = utc ? 0 : date.getTimezoneOffset(),
			flags = {
				d:    d,
				dd:   pad(d),
				ddd:  dF.i18n.dayNames[D],
				dddd: dF.i18n.dayNames[D + 7],
				m:    m + 1,
				mm:   pad(m + 1),
				mmm:  dF.i18n.monthNames[m],
				mmmm: dF.i18n.monthNames[m + 12],
				yy:   String(y).slice(2),
				yyyy: y,
				h:    H % 12 || 12,
				hh:   pad(H % 12 || 12),
				H:    H,
				HH:   pad(H),
				M:    M,
				MM:   pad(M),
				s:    s,
				ss:   pad(s),
				l:    pad(L, 3),
				L:    pad(L > 99 ? Math.round(L / 10) : L),
				t:    H < 12 ? "a"  : "p",
				tt:   H < 12 ? "am" : "pm",
				T:    H < 12 ? "A"  : "P",
				TT:   H < 12 ? "AM" : "PM",
				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
			};

		return mask.replace(token, function ($0) {
			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
		});
	};
}();

// Some common format strings
dateFormat.masks = {
	"default":      "ddd mmm dd yyyy HH:MM:ss",
	shortDate:      "m/d/yy",
	mediumDate:     "mmm d, yyyy",
	longDate:       "mmmm d, yyyy",
	fullDate:       "dddd, mmmm d, yyyy",
	shortTime:      "h:MM TT",
	mediumTime:     "h:MM:ss TT",
	longTime:       "h:MM:ss TT Z",
	isoDate:        "yyyy-mm-dd",
	isoTime:        "HH:MM:ss",
	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
	dayNames: [
		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
	],
	monthNames: [
		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
	]
};

// For convenience...
Date.prototype.format = function (mask, utc) 
{
	return dateFormat(this, mask, utc);
};