﻿var isCSS, isW3C, isIE4, isNN4, isIE6CSS;

// Initialize upon load to let all browsers establish content objects
function initDHTMLAPI( ) {
    if (document.images) {
        isCSS = (document.body && document.body.style) ? true : false;
        isW3C = (isCSS && document.getElementById) ? true : false;
        isIE4 = (isCSS && document.all) ? true : false;
        isNN4 = (document.layers) ? true : false;
        isIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? 
            true : false;
    }
}

// Set event handler to initialize API
//window.onload = initDHTMLAPI;
   
// Seek nested NN4 layer from string name
function seekLayer(doc, name) {
    var theObj;
    for (var i = 0; i < doc.layers.length; i++) {
        if (doc.layers[i].name == name) {
            theObj = doc.layers[i];
            break;
        }
        // dive into nested layers if necessary
        if (doc.layers[i].document.layers.length > 0) {
            theObj = seekLayer(document.layers[i].document, name);
        }
    }
    return theObj;
}
   
// Convert object name string or object reference
// into a valid element object reference
function getRawObject(obj) {
    var theObj;
    if (typeof obj == "string") {
        if (isW3C) {
            theObj = document.getElementById(obj);
        } else if (isIE4) {
            theObj = document.all(obj);
        } else if (isNN4) {
            theObj = seekLayer(document, obj);
        }
    } else {
        // pass through object reference
        theObj = obj;
    }
    return theObj;
}
   
// Convert object name string or object reference
// into a valid style (or NN4 layer) reference
function getObject(obj) {
    var theObj = getRawObject(obj);
    if (theObj && isCSS) {
        theObj = theObj.style;
    }
    return theObj;
}
   
// Position an object at a specific pixel coordinate
function shiftTo(obj, x, y) {
    var theObj = getObject(obj);
    if (theObj) {
        if (isCSS) {
            // equalize incorrect numeric value type
            var units = (typeof theObj.left == "string") ? "px" : 0;
            theObj.left = x + units;
            theObj.top = y + units;
        } else if (isNN4) {
            theObj.moveTo(x,y)
        }
    }
}
   
// Move an object by x and/or y pixels
function shiftBy(obj, deltaX, deltaY) {
    var theObj = getObject(obj);
    if (theObj) {
        if (isCSS) {
            // equalize incorrect numeric value type
            var units = (typeof theObj.left == "string") ? "px" : 0;
            theObj.left = getObjectLeft(obj) + deltaX + units;
            theObj.top = getObjectTop(obj) + deltaY + units;
        } else if (isNN4) {
            theObj.moveBy(deltaX, deltaY);
        }
    }
}
   
// Set the z-order of an object
function setZIndex(obj, zOrder) {
    var theObj = getObject(obj);
    if (theObj) {
        theObj.zIndex = zOrder;
    }
}
   
// Set the background color of an object
function setBGColor(obj, color) {
    var theObj = getObject(obj);
    if (theObj) {
        if (isNN4) {
            theObj.bgColor = color;
        } else if (isCSS) {
            theObj.backgroundColor = color;
        }
    }
}
   
// Set the visibility of an object to visible
function show(obj) {
    var theObj = getObject(obj);
    if (theObj) {
        theObj.visibility = "visible";
    }
}
   
// Set the visibility of an object to hidden
function hide(obj) {
    var theObj = getObject(obj);
    if (theObj) {
        theObj.visibility = "hidden";
    }
}
   
// Retrieve the x coordinate of a positionable object
function getObjectLeft(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (document.defaultView) {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("left");
    } else if (elem.currentStyle) {
        result = elem.currentStyle.left;
    } else if (elem.style) {
        result = elem.style.left;
    } else if (isNN4) {
        result = elem.left;
    }
    return parseInt(result);
}
   
// Retrieve the y coordinate of a positionable object
function getObjectTop(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (document.defaultView) {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("top");
    } else if (elem.currentStyle) {
        result = elem.currentStyle.top;
    } else if (elem.style) {
        result = elem.style.top;
    } else if (isNN4) {
        result = elem.top;
    }
    return parseInt(result);
}
   
// Retrieve the rendered width of an element
function getObjectWidth(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (elem.offsetWidth) {
        result = elem.offsetWidth;
    } else if (elem.clip && elem.clip.width) {
        result = elem.clip.width;
    } else if (elem.style && elem.style.pixelWidth) {
        result = elem.style.pixelWidth;
    }
    return parseInt(result);
}
   
// Retrieve the rendered height of an element
function getObjectHeight(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (elem.offsetHeight) {
        result = elem.offsetHeight;
    } else if (elem.clip && elem.clip.height) {
        result = elem.clip.height;
    } else if (elem.style && elem.style.pixelHeight) {
        result = elem.style.pixelHeight;
    }
    return parseInt(result);
}
   
// Return the available content width space in browser window
function getInsideWindowWidth( ) {
    if (window.innerWidth) {
        return window.innerWidth;
    } else if (isIE6CSS) {
        // measure the html element's clientWidth
        return document.body.parentElement.clientWidth;
    } else if (document.body && document.body.clientWidth) {
        return document.body.clientWidth;
    }
    return 0;
}
   
// Return the available content height space in browser window
function getInsideWindowHeight( ) {
    if (window.innerHeight) {
        return window.innerHeight;
    } else if (isIE6CSS) {
        // measure the html element's clientHeight
        return document.body.parentElement.clientHeight;
    } else if (document.body && document.body.clientHeight) {
        return document.body.clientHeight;
    }
    return 0;
}

var CalDateSel = null;
var monthNames = new Array('Януари', 'Февруари', 'Март', 'Април', 'Май', 'Юни', 'Юли', 'Август', 'Септември', 'Октомври', 'Ноември', 'Декември');
/*******************
  Utility Functions
********************/
// day of week of month's first day
function getFirstDay(theYear, theMonth){
    var firstDate = new Date(theYear,theMonth - 1,1);
    return firstDate.getDay( );
}
   
// number of days in the month
function getMonthLen(theYear, theMonth) {
    var nextMonth = new Date(theYear, theMonth, 1);
    nextMonth.setHours(nextMonth.getHours( ) - 3);
    return nextMonth.getDate( );
}
   
// read position of an element in regular document flow
function getElementPosition(elemID) {
    var offsetTrail = document.getElementById(elemID);
    var offsetLeft = 0;
    var offsetTop = 0;
    while (offsetTrail) {
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    if (navigator.userAgent.indexOf("Mac") != -1 && 
        typeof document.body.leftMargin != "undefined") {
        offsetLeft += document.body.leftMargin;
        offsetTop += document.body.topMargin;
    }
    return {left:offsetLeft, top:offsetTop};
}


// calendar holder form

   
// position and show calendar
function showCalendar(evt, cal) {
	SimCalObject = cal;
    evt = (evt) ? evt : event;
    if (evt) {
        if (document.getElementById("calendar").style.visibility != "visible") {
		CalDateSel = null;
            var elem = (evt.target) ? evt.target : evt.srcElement;
            var position = getElementPosition(elem.id);
            shiftTo("calendar", position.left + elem.offsetWidth, position.top);
            showTimePicker();
            show("calendar");
        } else {
            hide("calendarTimePicker");
            hide("calendar");
        }
    }
}


//hide display calendarTimePicker

function showTimePicker() {
    if (SimCalObject.requireTimePicker()) {
    show("calendarTimePicker")
    } else {
    hide("calendarTimePicker")
    }
}

   
/************************
  Draw Calendar Contents
*************************/
// clear and re-populate table based on form's selections
function populateTable(form) {
    // pick up date form choices
	var tmpMeta = form.chooseMonth.options[form.chooseMonth.selectedIndex].value;
	
	var tmpMoYear = tmpMeta.split("-")
    var theMonth = tmpMoYear[0];
  	//  var theYear = parseInt(form.chooseYear.options[form.chooseYear.selectedIndex].text);
    var  theYear = tmpMoYear[1];
	// initialize date-dependent variables
    var firstDay = getFirstDay(theYear, theMonth);
    var howMany = getMonthLen(theYear, theMonth);
    var today = new Date();
    
    // fill in month/year in table header
   // document.getElementById("tableHeader").innerHTML =  form.chooseMonth.options[form.chooseMonth.selectedIndex].text
    
    // initialize vars for table creation
    var dayCounter = 1;
    var TBody = document.getElementById("tableBody");
    // clear any existing rows
    while (TBody.rows.length > 0) {
        TBody.deleteRow(0);
    }
	
    var newR, newC, dateNum;
    var done=false;
    while (!done) {
        // create new row at end
        newR = TBody.insertRow(TBody.rows.length);
        if (newR) {
            for (var i = 0; i < 7; i++) {
                // create new cell at end of row
                newC = newR.insertCell(newR.cells.length);
				newC.className = "calendarCell";
                if (TBody.rows.length == 1 && i < firstDay) {
                    // empty boxes before first day
                    newC.innerHTML = "&nbsp;";
                    continue;
                }
                if (dayCounter == howMany) {
                    // no more rows after this one
                    done = true;
                }
                // plug in link/date (or empty for boxes after last day)
                if (dayCounter <= howMany) {
				
                    if (today.getFullYear( ) == theYear &&
                        today.getMonth( ) == theMonth  &&
                        today.getDate( ) == dayCounter) {
                        newC.id = "today";
                    }
					newC.id = dayCounter + "-" + theMonth + "-" + theYear;
                    newC.innerHTML = "<a href='#' onclick='chooseDate(\""+ dayCounter + "-" + theMonth + "-" + theYear +"\"); return false;'>" + dayCounter + "</a>";
                     dayCounter++;
               } else {
                    newC.innerHTML = "&nbsp;";
                }
            }
        } else {
            done = true;
        }
    }
}
   

/*******************
  Initializations
********************/
// create dynamic list of year choices

function fillYears( ) {
    var today = new Date( );
    var thisYear = today.getFullYear( );
  //  var yearChooser = document.dateChooser.chooseYear;
    var chooseMonth =  document.dateChooser.chooseMonth;
	var thisMonthIdx  = today.getMonth( );
	
	for (i = 0; i < 12; i++) {
	chooseMonth.options[chooseMonth.options.length] = new Option(monthNames[thisMonthIdx] + ' - ' + thisYear, thisMonthIdx + 1 + '-' + thisYear);
				thisMonthIdx++;
				if (thisMonthIdx == 12) {
					thisMonthIdx = 0;
					thisYear ++;
				}
	}
	
}


   
/*******************
   Process Choice
********************/
function chooseDate(e) {
//alert (e);
var obj = getRawObject(e)
clearSelectionOnCalendar()
obj.className = "calendarCellSelected";
CalDateSel = e;
}


function pDate(form) {

if (CalDateSel == null) {
	alert("Моля, изберете дата!");
	return;
}

var tmpHour = null;
var tmpMinute = null;

if (CalDateSel) {

if (SimCalObject.requireTimePicker()) {
if (form.pickHour.selectedIndex == 0) {
	alert("Моля, изберете час!");
	return;
}


if (form.pickMinute.selectedIndex == 0) {
	alert("Моля, изберете минути!");
	return;
}

 tmpHour = form.pickHour.options[form.pickHour.selectedIndex].value;
 tmpMinute =form.pickMinute.options[form.pickMinute.selectedIndex].value ;

    }
}

var tmpMoYear = CalDateSel.split("-");
	

SimCalObject.display(tmpMoYear[0], tmpMoYear[1], tmpMoYear[2], tmpHour, tmpMinute);
hide("calendarTimePicker");
hide("calendar");
form.pickHour.selectedIndex = 0;
form.pickMinute.selectedIndex = 0;
clearSelectionOnCalendar();
}

function clearSelectionOnCalendar() {
    var TBody = document.getElementById("tableBody");
    // clear any existing rows
	for (i=0; i < TBody.rows.length; i++) {
		for(m=0; m < 7; m++) {
			var c = TBody.rows[i].cells[m];
			c.className = "calendarCell";
		}
	}

}


function SimplexCal(day, month, year, hour, minute) {
	
	this.day = day;
	this.month = month;
	this.year = year;
	this.hour = hour;
	this.minute = minute;
	
	this.requireTimePicker = function(){
	    if (this.hour == null && this.minute == null ) {
	    return false;
	    } else {
	    return true;
	    }
	}
	
	this.display = function(d, m, y, hh, mm) {
	getRawObject(this.day).selectedIndex = d;
	getRawObject(this.month).selectedIndex = m;
	getRawObject(this.year).selectedIndex = (y - 2008);
		if (hh != null && mm != null) {
			//getRawObject(this.hour).selectedIndex = (hh/1) + 1 ;
			
			getRawObject(this.hour).selectedIndex = Math.abs(23-(hh/1)) + 1
			getRawObject(this.minute).selectedIndex = (mm / 5) + 1;
		} 
	}
	
}



function simplexCalInit() {
SimCalObject = new SimplexCal();
fillYears(); 
populateTable(document.dateChooser); 
initDHTMLAPI();
}

//document.onload =simplexCalInit();
var SimCalObject = null;
window.onload = simplexCalInit;
