﻿/**
 * @author Naveed Ul Islam
 */
var prayerTimes;
var prayerNamesEnglish = ['Fajar', 'Sunrise', 'Zohar', 'Asar', 'Sunset', 'Maghrib', 'Isha`'];
var prayerNamesUrdu = ['فجر', 'طلوع آفتاب', 'ظہر', 'عصر', 'غروب آفتاب', 'مغرب', 'عشاء'];
var prayerNamesArabic = [];

var timeOffset;		//between Alislam server and local machine
var today;

//  							<Default Settings for the project>
var latitude = 43.58821;
var longitude = -79.64172;
var localDST = get_time_zone_offset();
var city = "Mississagua";
var region = "Ontario";
var country = "Canada";
var address;
// 								</Default Settings for the project>

var dstOffset;
var gmtOffset;

var useDSTinstead = false; //Needs to be computed automatically.
var tOffset = localDST; // Time offset from Greenwich Mean Time.


var dstMismatch = false;
var dstMismatchAdjust = true; // Adjust to local DST! (tracked via cookie)

var dataSource;

function adhanEvent(oneTimeRefresh){
    var now = new Date();
    //	now.setHours(now.getHours()+5);
    //	now.setMinutes(now.getMinutes()+13);
    
    now.setTime(now.getTime() - timeOffset); // Adjusts local time with Alislam Server time.
    now.setHours(now.getHours() - (getOffsetHour(now.getTimezoneOffset() / -60) - getOffsetHour(tOffset)) - ((dstMismatch == true && dstMismatchAdjust == true) ? getOffsetHour(tOffset) - getOffsetHour(localDST) : 0)); //adjust for wrong local timezone hours...    
    now.setMinutes(now.getMinutes() - (getOffsetMinute(now.getTimezoneOffset() / -60) - getOffsetMinute(tOffset)) - ((dstMismatch == true && dstMismatchAdjust == true) ? getOffsetMinute(tOffset) - getOffsetMinute(localDST) : 0)); //adjust for wrong local timezone minutes...

    localTimeString = ((now.getHours() > 12) ? now.getHours() - 12 : now.getHours()) + ":" + ((now.getMinutes() < 10) ? "0" : "") + now.getMinutes() + " " + ((now.getHours() < 12) ? "am" : "pm");
    setInnerTextbyId('time', localTimeString);
    
    var nextPrayerSetFlag = false;
    
    var i = 0;
    for (var i = 0; i < prayerTimes.length; i++) {
        if (i != 1 && i != 4) {
            if (localTimeString == prayerTimes[i]) {
                switch (i) {
                    case 0:
                        myPlayItem(1);
                        break;
                    default:
                        myPlayItem(0);
                }                
            }
            document.getElementById("prayerTimeTR" + i).style.backgroundColor = "";
            var timeLeft = timeDifference(prayerTimes[i], localTimeString);
            if (timeLeft > -10 && nextPrayerSetFlag == false) {
                nextPrayerSetFlag = true;
                document.getElementById("t2nPrayerStr").innerHTML = timeLeft <= 0 ? "<b>now</b>" : timeDiffStr(timeLeft);
                if (timeLeft <= 0) {
                    document.getElementById("prayerTimeTR" + i).style.backgroundColor = "#FFFF99";
                }
                setInnerTextbyId("nextPrayerUR", prayerNamesUrdu[i]);
                setInnerTextbyId("nextPrayerEN", prayerNamesEnglish[i]);
                document.getElementById("t2nPrayer").style.display = "";
            }
        }
    }
    
    if (nextPrayerSetFlag != true) {
        document.getElementById("t2nPrayer").style.display = "none";
    }
    
    if (localDST != get_time_zone_offset()) {
        window.location.reload(true);
    }
    if (today != now.getDate()) {
        loadNewTimes();
        today = now.getDate();
    }
    if (oneTimeRefresh != true) {
        setTimeout("adhanEvent()", 60000 - (now.getSeconds() * 1000 + now.getMilliseconds()));
    }
}

function loadNewTimes(){

    var now = new Date(); // today	
    now.setTime(now.getTime() - timeOffset); // Adjusts local time with Alislam Server time.
    var times = prayTime.getPrayerTimes(now, latitude, longitude, eval(tOffset) - ((dstMismatch == true && dstMismatchAdjust == true) ? eval(tOffset) - localDST : 0));
    
    prayerTimes = times; //set global
    prayerNamesArabic = prayTime.timeNames;
    
    var str = '<table id="prayerTimetable">';
    var str2 = '<table id="sunTimetable">';
    
    for (var i = 0; i < times.length; i++) {
        if (i != 1 && i != 4) {
            str += '<tr id=prayerTimeTR' + i + '><td class="english">' + prayerNamesEnglish[i] + '</td>';
            str += '<td class="data">' + times[i] + '</td>';
            str += '<td class="urdu">' + prayerNamesUrdu[i] + '</td></tr>';
        }
        else {
            str2 += '<tr><td class="english">' + prayerNamesEnglish[i] + '</td>';
            str2 += '<td class="data">' + times[i] + '</td>';
            str2 += '<td class="urdu">' + prayerNamesUrdu[i] + '</td></tr>';
        }
    }
    str += '</table>';
    str2 += '</table>';
    document.getElementById('prayerTimes').innerHTML = str;
    document.getElementById('sunTimes').innerHTML = str2;
}

function loadData(obj){
    latitude = obj.Latitude;
    longitude = obj.Longitude;
    dstOffset = obj.Dstoffset;
	gmtOffset = (dataSource == "json") ? Math.round(obj.Gmtoffset/60/60):obj.Gmtoffset;
	tOffset = (useDSTinstead == true) ? dstOffset : gmtOffset;
	tOffset = (tOffset == null) ? dstOffset : tOffset; //for legacy cookie.
	
    city = obj.City;
    region = obj.RegionName;
    country = obj.CountryName;
	
	if (obj.dstMismatchAdjust)
	{
		dstMismatchAdjust = obj.dstMismatchAdjust;
	}
	
    address = city + ", " + region + ", " + country;
    
    updatePage();
    loadGoogleScript();
}

function startEngine(){			
	timeOffset = localGMT.getTime() - serverGMT.getTime();
	localTime.setTime(localTime.getTime() - timeOffset);
	today = localTime.getDate();
	
    if (loadCookies("checkExistance") == true) {		
        loadCookies("callLastObject");
        document.getElementById('getLocation').style.display = '';
    }
    else {		
        wsGetLocation("loadData");
    }
}

function ltrim(stringToTrim){
    return stringToTrim.replace(/^0+/, "");
}

function setInnerTextbyId(id, value){
    if (document.all) {
        document.getElementById(id).innerText = value;
    }
    else {
        document.getElementById(id).textContent = value;
    }
}

function get_time_zone_offset(){
    var current_date = new Date();
    var gmt_offset = current_date.getTimezoneOffset() / -60;
    return gmt_offset;
}

function adjustMismatch(){
    dstMismatchAdjust = !dstMismatchAdjust;
	document.getElementById("messages").style.display = (dstMismatchAdjust == true ? "": "none");
    updatePage(true);
}

function showMismatchDiv(show){
    if (show == true) {
        var amount = eval(tOffset) - eval(localDST);
        setInnerTextbyId('amountOperation', (amount > 0 ? "added" : "subtracted"));
        setInnerTextbyId('amount', Math.abs(amount) + " hour" + (Math.abs(amount) > 1 ? "s" : ""));
        setInnerTextbyId('amountAdjective', (amount > 0 ? "in" : "from"));
        document.getElementById("messagseRow").style.display = "";
    }
    else {
        document.getElementById("messagseRow").style.display = "none";
    }
}

function updatePage(oneTimeRefresh){
    setInnerTextbyId("city", city);
    setInnerTextbyId("region", region);
    setInnerTextbyId("country", country);
    document.getElementById("addressInput").value = address;
    setInnerTextbyId("latitude", latitude);
    setInnerTextbyId("longitude", longitude);
    setInnerTextbyId("timeZone", tOffset);
    
    dstMismatch = ((eval(tOffset) - localDST) != 0) ? true : false;
    showMismatchDiv(dstMismatch);
    
    loadNewTimes();
    adhanEvent(oneTimeRefresh);
}

function timeInMinutes(timeStr){
    var firstArray = timeStr.split(" ");
    var postOrAfter = firstArray[1];
    var timeArray = firstArray[0].split(":");
    var timeInMinutes = eval(timeArray[0]) * 60 + eval(timeArray[1]);
    timeInMinutes += ((postOrAfter == "pm" && eval(timeArray[0]) < 12) ? 12 * 60 : 0);
    return timeInMinutes;
}

function timeDifference(timeStr1, timeStr2){
    return timeInMinutes(timeStr1) - timeInMinutes(timeStr2);
}

function timeDiffStr(timeInMinutes){
    var tim = Math.abs(timeInMinutes);
    var h = Math.round(Math.floor(tim / 60));
    var m = tim % 60;
    var hStr = h + " hour" + ((h > 1) ? "s" : "");
    var hStrUR = " " + "گھنٹ" + ((h > 1) ? "ے" : "ا") + h + " ";
    var mStr = m + " minute" + ((m > 1) ? "s" : "");
    var mStrUR = m + "منٹ ";
    return ((h > 0) ? hStr : "") + ((h > 0 && m > 0) ? " &<br>" : "") + ((m > 0) ? mStr : "");
}

function getOffsetHour(value) {
	var v = eval(value);
	return v-v%1;
}
function getOffsetMinute(value) {
	var v = eval(value);
	return (v%1)*60;
}
