﻿function addOption(theSel, theText, theValue)
{
	var newOpt = new Option(theText, theValue);
	var selLength = theSel.length;
	theSel.options[selLength] = newOpt;
}

function deleteOption(theSel, theIndex)
{ 
	var selLength = theSel.length;
	if(selLength>0)
	{
		theSel.options[theIndex] = null;
	}
}

function moveOptions(theSelFrom, theSelTo)
{
	var selLength = theSelFrom.length;
	var selectedText = new Array();
	var selectedValues = new Array();
	var selectedCount = 0;

	var i;

	// Find the selected Options in reverse order
	// and delete them from the 'from' Select.
	for(i=selLength-1; i>=0; i--)
	{
		if(theSelFrom.options[i].selected)
		{
			selectedText[selectedCount] = theSelFrom.options[i].text;
			selectedValues[selectedCount] = theSelFrom.options[i].value;
			deleteOption(theSelFrom, i);
			selectedCount++;
		}
	}

	// Add the selected text/values in reverse order.
	// This will add the Options to the 'to' Select
	// in the same order as they were in the 'from' Select.
	for(i=selectedCount-1; i>=0; i--)
	{
		addOption(theSelTo, selectedText[i], selectedValues[i]);
	}
}

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

function AttachEvent(obj,evt,fnc,useCapture){
	if (!useCapture) useCapture=false;
	if (obj.addEventListener){
		obj.addEventListener(evt,fnc,useCapture);
		return true;
	} else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
	else{
		MyAttachEvent(obj,evt,fnc);
		obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
	}
} 

//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent or addEventListener
function MyAttachEvent(obj,evt,fnc){
	if (!obj.myEvents) obj.myEvents={};
	if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
	var evts = obj.myEvents[evt];
	evts[evts.length]=fnc;
}
function MyFireEvent(obj,evt){
	if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
	var evts = obj.myEvents[evt];
	for (var i=0,len=evts.length;i<len;i++) evts[i]();
}

function WireScheduleTable()
{
	var aCells = getElementsByClassName('usercell', 'td');
	var aDates = getElementsByClassName('datecolumn', 'td');
	var oPicker = $get('sPicker');
	var oStatusType = getElementsByClassName('statustype', 'select', oPicker)[0];
	var oCallType = getElementsByClassName('calltype', 'select', oPicker)[0];
	
	AttachEvent(oPicker, 'click', CancelEvent, true);
	AttachEvent(document, 'click', HideSchedulePicker, true);
	AttachEvent(oStatusType, 'change', UpdateSchedule, true);
	AttachEvent(oCallType, 'change', UpdateSchedule, true);
	
	for (var i = 0; i < aCells.length; i++)
	{
		var e = aCells[i];
		AttachEvent(aCells[i],'click',MoveSchedulePicker,true);
	}
	
	for (var i = 0; i < aDates.length; i++)
	{
		AttachEvent(aDates[i],'click',MoveSchedulePicker,true);
	}
}

function CancelEvent(obj)
{
	if (typeof( window.event ) != "undefined" )
    {
        // IE
        obj.cancelBubble=true;
    }
    else 
    {
        // Firefox
        obj.stopPropagation();
    }
    
    $get('sPicker').style.display = 'block';
}

function HideSchedulePicker()
{
	var oPicker = $get('sPicker')
	oPicker.style.display = 'none';
}

function MoveSchedulePicker(obj)
{
	var oTarget = (typeof( window.event ) != "undefined" ) ? obj.srcElement : obj.target;
	var oPicker = $get('sPicker');
	var oHTarget = $get('hTarget');
	var oStatusType = getElementsByClassName('statustype', 'select', oPicker)[0];
	var oCallType = getElementsByClassName('calltype', 'select', oPicker)[0];
	var oTable = getElementsByClassName('scheduletable', 'table')[0];
	var sStoredValue = oTarget.id.substring(oTarget.id.lastIndexOf('c'), oTarget.id.length);

	oHTarget.value = oTarget.id;
	
	if ($get(sStoredValue))
	{
		var oValue = eval('(' + $get(sStoredValue).value + ')');
	
		oStatusType.value = oValue.StatusTypeID;
		oCallType.value = oValue.CallTypeID;
	}
	else
	{
		oStatusType.value = "0";
		oCallType.value = "0";
	}

	oPicker.style.postion = 'absolute';
	oPicker.style.display = 'block';
	
	oPicker.style.top = oTarget.offsetTop + oTable.offsetTop + oTarget.offsetHeight + 'px';
	oPicker.style.left = oTarget.offsetLeft - (oPicker.offsetWidth / 2) + (oTarget.offsetWidth / 2) + oTable.offsetLeft + 'px';
	
	if (typeof( window.event ) != "undefined" )
	{
		oPicker.style.top = oTarget.offsetTop + 426 + 'px';
		oPicker.style.left = getRealLeft(oTarget.id) + (oTarget.offsetWidth / 2) - (oPicker.offsetWidth / 2) + 'px';
	}
	
	if (typeof( window.event ) != "undefined" )
    {
        // IE
        obj.cancelBubble=true;
    }
    else 
    {
        // Firefox
        obj.stopPropagation();
    }
}

function getRealLeft(el)
{
	var L=0;
	var tempEl = document.getElementById(el);
	while(tempEl.parentNode)
	{
		L+= ( tempEl.offsetLeft)? tempEl.offsetLeft: 0;
		if(tempEl == document.body)
			break;
		tempEl = tempEl.parentNode;
	}
	return L;
}

function UpdateSchedule()
{
	// Grab picker reference
	var oPicker = $get('sPicker')
	var oStatusType = getElementsByClassName('statustype', 'select', oPicker)[0];
	var oCallType = getElementsByClassName('calltype', 'select', oPicker)[0];
	var oScheduleID = getElementsByClassName('scheduleid', 'input', null)[0];
	var sCell = $get('hTarget').value;
	var iUserID = sCell.substring(sCell.lastIndexOf('u') + 1, sCell.length);
	var dDate;
	
	if (sCell.lastIndexOf('u') > 0)
	{
		dDate = sCell.substring(sCell.lastIndexOf('c') + 1, sCell.lastIndexOf('u'));
	
		// Save data
		Support.SaveScheduleItem(oScheduleID.value, iUserID, dDate, oStatusType.value, oCallType.value, UpdateScheduleCell, UpdateScheduleFailed, sCell);
	}
	else
	{
		dDate = sCell.substring(sCell.lastIndexOf('c') + 1, sCell.length);
		
		// Save entire row
		Support.SaveScheduleItems(oScheduleID.value, dDate, oStatusType.value, oCallType.value, UpdateScheduleRow, UpdateScheduleFailed, sCell);
	}
}

function UpdateScheduleRow(args, userContext, sender)
{
	var oData = eval('(' + args + ')');
	var oTarget = $get(userContext);
	var sCellID = userContext.substring(userContext.lastIndexOf('c'), userContext.length);
	var oValues = $get('dValues');
	var oTable = getElementsByClassName('scheduletable', 'table', null)[0];
	var iRowIndex;
	
	// Loop through all rows in table
	for (var r = 0; r < oTable.rows.length; r++)
	{
		// Loop through cells in row
		for (var c = 0; c < oTable.rows[r].cells.length; c++)
		{
			var oDateCell = oTable.rows[r].cells[c];
			
			if (oDateCell.id.indexOf(sCellID) > 0)
			{
				// This is the row
				iRowIndex = r;
				
				break;
			}
		}
	}
	
	// Loop through identified row
	for (var c = 0; c < oTable.rows[iRowIndex].cells.length; c++)
	{
		// Get refence to current cell
		var oUserCell = oTable.rows[iRowIndex].cells[c];
	
		// Only update user cells
		if (oUserCell.className == 'usercell')
		{
			sCellID = oUserCell.id.substring(oUserCell.id.lastIndexOf('c'), oUserCell.id.length);
			oTarget = $get(oUserCell.id);
		
			if (oData.StatusTypeID != 0 || oData.CallTypeID != 0)
			{
				if ($get(sCellID)) { oValues.removeChild($get(sCellID)); }
				var oElement = document.createElement('input');
				oElement.setAttribute('type', 'hidden');
				oElement.setAttribute('id', sCellID);
				oElement.setAttribute('value', '{StatusTypeID:' + oData.StatusTypeID + ',CallTypeID:' + oData.CallTypeID + '}');
				oValues.appendChild(oElement);
			}
			else
			{
				if ($get(sCellID)) { oValues.removeChild($get(sCellID)); }
			}
			
			oTarget.style.backgroundColor = oData.BackColor;
			oTarget.style.color = oData.TextColor;
			oTarget.innerHTML = oData.Code;
		}
	}
}

function UpdateScheduleCell(args, userContext, sender)
{
	var oData = eval('(' + args + ')');
	var oTarget = $get(userContext);
	var sCellID = userContext.substring(userContext.lastIndexOf('c'), userContext.length);
	var oValues = $get('dValues');
	
	if (oData.StatusTypeID != 0 || oData.CallTypeID != 0)
	{
		if ($get(sCellID)) { oValues.removeChild($get(sCellID)); }
		var oElement = document.createElement('input');
		oElement.setAttribute('type', 'hidden');
		oElement.setAttribute('id', sCellID);
		oElement.setAttribute('value', '{StatusTypeID:' + oData.StatusTypeID + ',CallTypeID:' + oData.CallTypeID + '}');
		oValues.appendChild(oElement);
	}
	else
	{
		if ($get(sCellID)) { oValues.removeChild($get(sCellID)); }
	}
	
	oTarget.style.backgroundColor = oData.BackColor;
	oTarget.style.color = oData.TextColor;
	oTarget.innerHTML = oData.Code;
}

function UpdateScheduleFailed()
{
	alert('Oh NO!');
}
