// Generic 
//var isIE = document.all ? true : false;
//if (!isIE) document.captureEvents(Event.MOUSEMOVE);

document.onmousemove = getMouseXY;

var mouseX = 0;
var mouseY = 0;

function getMouseXY(e)
{
  if (!e || e == null)
  	e = window.event; 

  if (document.all ? true : false)
  {
    mouseX = e.clientX; // + document.body.scrollLeft;
    mouseY = e.clientY; // + document.body.scrollTop;
  }
  else
  {
    mouseX = e.pageX;
    mouseY = e.pageY;
  }  

  if (mouseX < 0) mouseX = 0;
  if (mouseY < 0) mouseY = 0;

  return true;
}

function getById(id)
{
	var elem, vis;
	
	if (document.getElementById) // this is the way the standards work
		elem = document.getElementById(id);
	else if (document.all) // this is the way old msie versions work
		elem = document.all[id];
	else if (document.layers) // this is the way nn4 works
		elem = document.layers[id];

	return elem;
}

/*
	Graphics function
*/
function Size(width, height)
{
    this.width = width;
    this.height = height;
}

/*
    Form function
*/
var TYPE_STRING = 0;
var TYPE_NUMBER = 1;
var TYPE_SELECT = 2;
var ERROR_COLOR = "#ff3030";

function FormItem(fieldName, dataType)
{
    this.fieldName = fieldName;
    this.dataType = dataType;
}

function FormManager(formName)
{
    this.formName = formName;
    this.formItems = new Array(16);
    this.numFormItems = 0;
}

FormManager.prototype.add = function(fieldName, dataType)
{
    if (this.numFormItems >= this.formItems.length)
        alert("No more space for FormItem.");
    else
        this.formItems[this.numFormItems++] = new FormItem(fieldName, dataType);
}

FormManager.prototype.validate = function()
{
    var i;
    var formItem;
    var thisForm;
    var thisElement;
    var isError = false;

    try
    {
        thisForm = document.forms[this.formName];
        for (i = 0; i < this.numFormItems; i++)
        {
            formItem = this.formItems[i];
            thisElement = thisForm.elements[formItem.fieldName];
            if (thisElement.type == "hidden")
                continue;
                
            if (formItem.dataType == TYPE_STRING)
            {
                value = String(thisElement.value);
                if (value.length == 0)
                {
                    thisElement.style.backgroundColor = ERROR_COLOR;
                    isError = true;
                }
                else
                    thisElement.style.backgroundColor = "";
            }
            else if (formItem.dataType == TYPE_NUMBER)
            {
                value = String(thisElement.value);
                if (value.length == 0 || isNaN(value))
                {
                    thisElement.style.backgroundColor = ERROR_COLOR;
                    isError = true;
                }
                else
                    thisElement.style.backgroundColor = "";
            }
            else if (formItem.dataType == TYPE_SELECT)
            {
                value = String(thisElement.options[thisElement.selectedIndex].value);
                if (value.length == 0)
                {
                    thisElement.style.backgroundColor = ERROR_COLOR;
                    isError = true;
                }
                else
                    thisElement.style.backgroundColor = "";
            }
            else
            {
                alert("Invalid formItem.dataType = " + formItem.dataType);
                isError = true;
            }
        }
    }
    catch (e)
    {
        alert(e.description);
        isError = true;
    }

    if (isError)
    {
        alert("Please check the red field(s).");
        return false;
    }

    return true;
}

/*
    Gestione Label
*/
function Label(key, value)
{
    this.key = key;
    this.value = value;
}

function Labels()
{
	this.labelList = new Array(32);
	this.numLabels = 0;
}

Labels.prototype.add = function(key, value)
{
    if (this.numLabels >= this.labelList.length)
        alert("No more space for Label.");
    else
        this.labelList[this.numLabels++] = new Label(key, value);
}

Labels.prototype.get = function(key)
{
    for (i = 0; i < this.numLabels; i++)
    	if (this.labelList[i].key == key)
        	return this.labelList[i].value;

	return "Label " + key + " not found.";
}

var labels = new Labels();

/*
    Gestione AJAX
*/
function Ajax()
{
    var ajaxInitialized= false;
    this.xmlHttp = null;

    try
    {
        this.xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        ajaxInitialized = true;
    }
    catch (e)
    {
        try
        {
            this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            ajaxInitialized = true;
        }
        catch (e)
        {
        }
    }
    if (!ajaxInitialized && typeof XMLHttpRequest != 'undefined')
    {
        try
        {
            this.xmlHttp = new XMLHttpRequest();
            ajaxInitialized = true;
        }
        catch (e)
        {
        }
    }
    if (!ajaxInitialized)
    {
        try
        {
            this.xmlHttp = window.createRequest();
            ajaxInitialized = true;
        }
        catch (e)
        {
        }
    }

    if (!ajaxInitialized)
        alert("Unable to initialize AJAX.");
}

Ajax.prototype.getStatus = function()
{
    return this.xmlHttp.status;
}

Ajax.prototype.getData = function(url)
{
    var urlts;
    var data;

    url_ts = url;
    if (url.indexOf("?") != -1)
        url_ts += "&ts=";
    else
        url_ts += "?ts=";
    url_ts += new Date();

    try
    {
        this.xmlHttp.open(
            "GET",
            url_ts,
            false);
        this.xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        this.xmlHttp.send(null);

        data = this.xmlHttp.responseText;

        if (this.xmlHttp.status == 200)
            return data;
        else
        {
            alert("Unable to get data from " + url + " error " + this.xmlHttp.status);
            return null;
        }
    }
    catch (e)
    {
        alert(e.description);
    }
    finally
    {
    }
}

/*
    Date
*/
function isValidDate(data)
{
    aData = data.split(" ");

    if (aData.length > 1)
    {
        sDate = aData[0];
        sTime = aData[1];
    }
    else
    {
        sDate = aData[0];
        sTime = "00:00:00.0";
    }

    sYMD = sDate.split("-");
    if (sYMD.length != 3)
    	return false;

    sTime = sTime.replace(".", ":");
    sHMS = sTime.split(":");

    if (sHMS.length != 3)
		return false;

    date = new Date(
        Number(sYMD[0]),
        Number(sYMD[1]) - 1,
        Number(sYMD[2]),
        Number(sHMS[0]),
        Number(sHMS[1]),
        Number(sHMS[2]));

    inDate =
        sYMD[0] + "-" +
        (sYMD[1].length == 1 ? "0" + sYMD[1] : sYMD[1]) + "-" +
        (sYMD[2].length == 1 ? "0" + sYMD[2] : sYMD[2]) + " " +
        (sHMS[0].length == 1 ? "0" + sHMS[0] : sHMS[0]) + ":" +
        (sHMS[1].length == 1 ? "0" + sHMS[1] : sHMS[1]) + ":" +
        (sHMS[2].length == 1 ? "0" + sHMS[2] : sHMS[2]);

    outDate =
        date.getFullYear().toString() + "-" +
        ((date.getMonth() + 1).toString().length == 1 ? "0" + (date.getMonth() + 1).toString() : (date.getMonth() + 1).toString()) + "-" +
        (date.getDate().toString().length == 1 ? "0" + date.getDate().toString() : date.getDate().toString()) + " " +
        (date.getHours().toString().length == 1 ? "0" + date.getHours().toString() : date.getHours().toString()) + ":" +
        (date.getMinutes().toString().length == 1 ? "0" + date.getMinutes().toString() : date.getMinutes().toString()) + ":" +
        (date.getSeconds().toString().length == 1 ? "0" + date.getSeconds().toString() : date.getSeconds().toString());

    return (inDate == outDate);
}

/*
    Numeri & C.
*/
function format_number(p, d, ds)
{
  var r;
  if (p < 0)
  {
      	p=-p;
		r = format_number2(p, d, ds);
		r = "-" + r;
  }
  else
  {
		r=format_number2(p , d, ds);
  }
  return r;
}

function format_number2(pnumber, decimals, decimalsSeparator)
{
  var strNumber = new String(pnumber);
  var arrParts = strNumber.split('.');
  var intWholePart = parseInt(arrParts[0],10);
  var strResult = '';
  if (isNaN(intWholePart))
    intWholePart = '0';
  if(arrParts.length > 1)
  {
    var decDecimalPart = new String(arrParts[1]);
    var i = 0;
    var intZeroCount = 0;
     while ( i < String(arrParts[1]).length )
     {
       if( parseInt(String(arrParts[1]).charAt(i),10) == 0 )
       {
         intZeroCount += 1;
         i += 1;
       }
       else
         break;
    }
    decDecimalPart = parseInt(decDecimalPart,10)/Math.pow(10,parseInt(decDecimalPart.length-decimals-1));
    Math.round(decDecimalPart);
    decDecimalPart = parseInt(decDecimalPart)/10;
    decDecimalPart = Math.round(decDecimalPart);

    //If the number was rounded up from 9 to 10, and it was for 1 'decimal'
    //then we need to add 1 to the 'intWholePart' and set the decDecimalPart to 0.

    if(decDecimalPart==Math.pow(10, parseInt(decimals)))
    {
      intWholePart+=1;
      decDecimalPart="0";
    }
    var stringOfZeros = new String('');
    i=0;
    if( decDecimalPart > 0 )
    {
      while( i < intZeroCount)
      {
        stringOfZeros += '0';
        i += 1;
      }
    }
    decDecimalPart = String(intWholePart) + decimalsSeparator + stringOfZeros + String(decDecimalPart);
    var dot = decDecimalPart.indexOf(decimalsSeparator);
    if(dot == -1)
    {
      decDecimalPart += decimalsSeparator;
      dot = decDecimalPart.indexOf(decimalsSeparator);
    }
    var l=parseInt(dot)+parseInt(decimals);
    while(decDecimalPart.length <= l)
    {
      decDecimalPart += '0';
    }
    strResult = decDecimalPart;
  }
  else
  {
    var dot;
    var decDecimalPart = new String(intWholePart);

    decDecimalPart += decimalsSeparator;
    dot = decDecimalPart.indexOf(decimalsSeparator);
    var l=parseInt(dot)+parseInt(decimals);
    while(decDecimalPart.length <= l)
    {
      decDecimalPart += '0';
    }
    strResult = decDecimalPart;
  }
  return strResult;
}

function blankUrl(url)
{
    window.open(url);
}

function plusMinusLayer(imgObj, id)
{
    divObj = document.getElementById(id);

    if (divObj.style.display == "block")
    {
        imgObj.src = imgObj.src.replace("Minus.gif", "Plus.gif");
        divObj.style.display = "";
    }
    else
    {
        imgObj.src = imgObj.src.replace("Plus.gif", "Minus.gif");
        divObj.style.display = "block";
    }
}

function selectTab(tabPrefix, position)
{
    var tabsId;
    var cntId;
    var countId;
    var numTabs;

    tabId = tabPrefix + "_tab_";
    cntId = tabPrefix + "_cnt_";
    countId = tabPrefix + "_count";

    countObj = document.getElementById(countId);
    numTabs = Number(countObj.value);

    for (i = 1; i <= numTabs; i++)
    {
        tabObj = document.getElementById(tabId + i);
        cntObj = document.getElementById(cntId + i);

        if (position == i)
        {
            tabObj.className = "on";
            cntObj.style.display = "block";
        }
        else
        {
            tabObj.className = "off";
            cntObj.style.display = "none";
        }
    }
}

function newsFormOnChange(selectObject, idNewsTypeMultimediaType)
{
    alert(selectObject.options[selectObject.selectedIndex].value);
//    alert(selectObject.selectedIndex);
}

function onloadPage()
{
	activateActiveX();
	onLevelOverActivation();
}

function jumpToSite(selectObject)
{
//	var url = selectObject.options[selectObject.selectedIndex].value;
	var url = selectObject.value;
	if (url != "")
		document.location = url;
}

function onLevelOverActivation()
{
	positionObj = document.getElementById("level_activation");
	if (positionObj != null)
		onLevelOver(positionObj.value);
}

function onLevelOver(position)
{
    countObj = document.getElementById("firstLevel_count");
    numTabs = Number(countObj.value);

	for (i = 1; i <= numTabs; i++)
	{
		id1Obj = document.getElementById("firstLevel_" + i);
		id2Obj = document.getElementById("secondLevel_" + i);
		if (id1Obj != undefined && id2Obj != undefined)
		{
	        if (position == i)
	        {
				id2Obj.style.display = "block";
				x = id1Obj.offsetLeft + (id1Obj.offsetWidth / 2);
				x -= (id2Obj.offsetWidth / 2);
				if ((x + id2Obj.offsetWidth) > 760) 
					x = 760 - id2Obj.offsetWidth;
				else if (x < 0)
					x = 0;
	        	id2Obj.style.left = x + "px";
			}
			else
				id2Obj.style.display = "none";
		}
	}
}

function moveOption(fromSelect, toSelect, all)
{
	fromSelectObj = document.getElementById(fromSelect);
	toSelectObj = document.getElementById(toSelect);

	dst = toSelectObj.options.length;
	for (src = fromSelectObj.options.length - 1; src >= 0 ; src--)
	{
		if (all == true || fromSelectObj.options[src].selected)
		{
			opt = new Option(fromSelectObj.options[src].text, fromSelectObj.options[src].value);
			toSelectObj.options[dst++] = opt;
			fromSelectObj.options[src] = null;
		}
	}
}

function selectAllOption(select)
{
	selectObj = document.getElementById(select);
	for (i = 0; i < selectObj.options.length; i++)
		selectObj.options[i].selected = true;
}
/*
function pickDate(dateFieldId)
{
	dateFieldObj = document.getElementById(dateFieldId);
	calendarObj = document.getElementById("calendar");
	
//	alert(calendarObj +" " + mouseX);

	calendarObj.innerHTML = "Selected";
	calendarObj.style.left = mouseX + "px";
	calendarObj.style.top = mouseY + "px";
	calendarObj.style.display = "block";
}
*/

var type = '';
var days = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
var dateFieldObj;

function showCalendar(dateFieldId)
{
	var container = document.getElementById('calendarcontainer');
	var header = document.getElementById('calendartop');
	header.innerHTML = "Calendar"; 
	if (document.all)
	{
		var entries = document.getElementsByTagName('select');
		for (var i = 0; i < entries.length; i++)
			if (entries[i].className == 'cal_hide')
				entries[i].style.display = 'none';
	}
	
	var today = new Date();
	document.getElementById('calendaryear').innerHTML = today.getFullYear();

	updateMonth();

	dateFieldObj = document.getElementById(dateFieldId);

	container.style.left = mouseX + "px";
	container.style.top = mouseY + "px";
	container.style.display = "block";
}

function fill(day, month)
{
	var date = "";
	closeCalendar();

	month++;
	if (month < 10)
		date += "0"
	date += String(month) + "-";
	
	if (day < 10)
		date += "0"
	date += String(day) + "-";
	
	date += document.getElementById('calendaryear').innerHTML;
	
	dateFieldObj.value = date;	
}

function closeCalendar ()
{
	var container = document.getElementById('calendarcontainer');
	if (document.all)
	{
		var entries = document.getElementsByTagName('select');
		for (var i = 0; i < entries.length; i++)
			if (entries[i].className == 'cal_hide')
				entries[i].style.display = 'block';
	}
	container.style.display = 'none';
}

function updateMonth()
{
	year = Number(document.getElementById('calendaryear').innerHTML);
	month = document.getElementById('calendarmonth').options.selectedIndex;
	selection = month;
	month += 1;
	var noOfDays = getNumberOfDays(month, year);
	var firstDay = getFirstDay(month, year);
	fillMonth(month, firstDay, noOfDays, selection);
}

function getNumberOfDays(m, y)
{
	var days = 31;
	switch (parseInt(m))
	{
		case 4: case 6: case 9: case 11:
			days = 30;
			break;
		case 2:
		  if ((y % 4 == 0) ^ (y % 100 == 0) ^ (y % 400 == 0))
			days = 29;
		  else
			days = 28;
		  break;
	}
	return days;
}

function prevYear()
{
	today = new Date();
	yearObj = document.getElementById('calendaryear');
	year = Number(yearObj.innerHTML) - 1;
	if (year < today.getFullYear())
		year = today.getFullYear();
	yearObj.innerHTML = String(year);
	updateMonth();
}

function nextYear()
{
	yearObj = document.getElementById('calendaryear');
	year = Number(yearObj.innerHTML) + 1;
	yearObj.innerHTML = String(year);
	updateMonth();
}

function getFirstDay(m, y)
{
	d = new Date(y, m-1, 1);
	d.setHours(12);
	return (d.getDay() - 1 >= 0 ? d.getDay() - 1 : d.getDay() + 6);
}

function fillMonth(month, firstDay, noOfDays, monthIndex)
{
	var firstSet = false;
	var dayCounter = 1;
	var today = new Date();
	dateToday = today.getDate();
	monthToday = today.getMonth() + 1;
	var sHTML = '<table cellspacing="0" border=\"0\"><tr class="head">'
	for (var i = 0; i < days.length; i ++)
		sHTML += '<td>' + days[i] + '</td>\n';

	sHTML += '</tr>';
	while (dayCounter <= noOfDays)
	{
		sHTML += '<tr>';
		for (i = 0; i < 7; i++)
		{
			if (!firstSet && i < firstDay)
			{
				sHTML += '<td>&nbsp;</td>\n';
			}
			else
			{
				firstSet = true;
				if (dayCounter <= noOfDays)
				{
					if ((monthToday == month) && (dayCounter < dateToday))
						sHTML += '<td>' + dayCounter + '</td>\n';
					else
						sHTML += '<td><a alt="" href="javascript:fill(' + dayCounter + ' , ' + monthIndex + ');">' + dayCounter + '</a></td>\n';
				}
				else
					sHTML += '<td>&nbsp;</td>\n';
				dayCounter++;
			}
		}
		sHTML += '</tr>'
	}
	sHTML += '</table>';
	document.getElementById('monthtable').innerHTML = sHTML;
}

function onChangeCdModel(objSelect)
{
	objImg = document.getElementById("cdModelImg");
	objImg.src = "/mm?id=" + idMultimediaModel[objSelect.selectedIndex];
}

function onChooseMultimediaType(id)
{
	var size = mtSizes[id];
	objAdvisedSize = document.getElementById("advisedSize");
	if (size != null)
	{
		msg = "";
		if (size.width == -1) msg += "any x ";
		else				  msg += size.width + " x ";
		if (size.height == -1) msg += "any";
		else				  msg += size.height;
		
		objAdvisedSize.innerHTML = msg;
	}
	else
		objAdvisedSize.innerHTML = " ";
}

function activateActiveX()
{
	if (navigator.appName == "Microsoft Internet Explorer")
	{
		var arrElements = new Array(3);
		arrElements[0] = "object";
		arrElements[1] = "embed";
		arrElements[2] = "applet";
        for (n = 0; n < arrElements.length; n++)
        {
			replaceObj = document.getElementsByTagName(arrElements[n]);
            for (i = 0; i < replaceObj.length; i++)
			{
				parentObj = replaceObj[i].parentNode;
				newHTML = parentObj.innerHTML;
				parentObj.removeChild(replaceObj[i]);
				parentObj.innerHTML = newHTML;
			}
		}
	}
}
