function Clock()
{   
    if(typeof this.data == "undefined")
        this.data = init();
	this.clock = "Clock"+(Clock.count++) + "Object";
	eval(this.clock + "=this");
    /*####################+++get methods+++########################*/
    this.getDate                = GetClockDate;
    this.getTime                = GetClockTime;
    this.getID                  = GetObject;
    this.getMonthListAsNumber   = getMonthListAsNumber
    this.getShortMonthList      = getShortMonthList
    this.getLongMonthList       = getLongMonthList
    this.getShortDayList        = getShortDayList
    this.getLongDayList         = getLongDayList
    /*####################+++set methods+++########################*/
    this.setClockFormat     = SetFormat;
    this.setAmPmFormat      = SetAmPm;
    this.setLanguage        = SetLanguage;
    this.setID              = SetObject;
    /*####################+++other methods+++######################*/
    this.build              = GenerateClock;
    this.fetch_object       = fetch_obj;
}



/*###################################################################################################*/
function init()
{
    var dflvl = new Array();
    dflvl["obj"] = "shwTime";
    dflvl["shortDate"] = 0;
    dflvl["monthAsInt"] = 0;
    dflvl["monthAsDoubleInt"] = 0;
    dflvl["twelveHour"] = 1;
    dflvl["language"] = "en";
    dflvl["clockformat"] = "weekdaynameddmmYYYYHms";
    dflvl["showSeconds"] = 1;
    return dflvl;
}

/*####################+++get functions+++########################*/
function GetClockDate() 
{
    var dayname = "";
    var day = "";
    var month = "";
    var year = "";
	if (this.data['shortDate'])
    {
		var monthList = (this.data["monthAsInt"] || this.data["monthAsDoubleInt"])?this.getMonthListAsNumber():this.getShortMonthList(this.data['language']);
		var dayList = this.getShortDayList(this.data['language']);
	}
	else
    {
		var monthList = (this.data["monthAsInt"] || this.data["monthAsDoubleInt"])?this.getMonthListAsNumber():this.getLongMonthList(this.data['language']);
		var dayList = this.getLongDayList(this.data['language']);
	}
	now = new Date();
    if(this.data["clockformat"].search("weekdayname") != -1)
	    dayname = dayList[now.getDay()]+", ";
    if(this.data["clockformat"].search("dd") != -1)
        day = now.getDate();
    if(this.data["clockformat"].search("mm") != -1)
        month = monthList[now.getMonth()];
    if(this.data["clockformat"].search("YYYY") != -1)
        year = now.getFullYear();

    switch(this.data['language'])
    {
        case "de":
            return dayname + day + ". " + month  + " " + year;
        break;
        case "en":
        default:
            return dayname + month + " " + day +  ", " + year;
        break;
    }
   
}
function GetClockTime()
{
	var now = new Date();
	var minutes = now.getMinutes();
	if (minutes<10) minutes = "0"+minutes;
	var hour = now.getHours();
	var ampm = "am";
	if (this.data["twelveHour"])
    {
		if (hour>12)
        {
			hour-=12;
			ampm = "pm";
		}
		else if (hour==0)
        {
			hour = 12;
		}
	}
	if (hour<10) hour = "&nbsp;"+hour;
	var time = hour+":"+minutes;
	if (this.data["showSeconds"])
    {
		var sec = now.getSeconds();
		if (sec<10) sec = "0"+sec;
		time += ":"+sec;
	}
	if (this.data["twelveHour"]) time += ampm;
    else if(!this.data["twelveHour"] && this.data["language"] == "de") time += "&nbsp;Uhr"
    return time;
}
function getMonthListAsNumber()
{
    if(this.data["monthAsInt"])
        languages[lang] = new Array(1,2,3,4,5,6,7,8,9,10,11,12);
    else if(this.data["monthAsDoubleInt"])
        languages[lang] = new Array('01','02','03','04','05','06','07','08','09','10','11','12');
    return languages[lang];
}
function getShortMonthList(lang)
{
    var languages = new Array();
    languages['en'] = new Array('Jan','Feb','Mar','Apr','May','Jun','July','Aug','Sept','Oct','Nov','Dec');
    languages['de'] = new Array('Jan','Feb','M&auml;rz','Apr','Mai','Juni','Juli','Aug','Sept','Okt','Nov','Dez');
    return languages[lang];
}

function getLongMonthList(lang)
{
    var languages = new Array();
    languages['en'] = new Array('January','February','March','April','May','June','July','August','September','October','November','December')
    languages['de'] = new Array ("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
    return languages[lang];
}

function getShortDayList(lang)
{
    var languages = new Array();
    languages['en'] = new Array('Sun','Mon','Tues','Wed','Th','Fri','Sat');
    languages['de'] = new Array('So','Mo','Di','Mi','Do','Fr','Sa');
    return languages[lang];
}
function getLongDayList(lang)
{
    var languages = new Array();
    languages['en'] = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
    languages['de'] = new Array ("Sonntag","Montag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");
    return languages[lang];
}
function GetObject()
{
    return this.data['obj'];
}
/*####################+++set functions+++########################*/
function SetFormat(stringvalue)
{
    this.data["clockformat"] = stringvalue;
}
function SetAmPm(intvalue)
{
    this.data["twelveHour"] = intvalue;
}
function SetLanguage(stringvalue)
{
    this.data["language"] = stringvalue;
}
function SetObject(mixedvalue)
{
    this.data["obj"] = mixedvalue;
}
/*####################+++other functions+++########################*/
function GenerateClock()
{
    if(this.getID() == null)
    { 
        alert("no object found for show this clock!");
        return false;
    }
    if(ob = this.fetch_object())
    {
        var showtime = "";
        if(this.data["clockformat"].search("Hm") != -1)
            showtime = " "+this.getTime();
        ob.innerHTML = this.getDate()+showtime;
        setTimeout(this.clock+".build()",1000)
    }
    else
    {
        alert("the object \""+this.getID()+"\" is not found!");
        return false;
    }
}
function fetch_obj()
{
	if (document.getElementById)
	{
		return document.getElementById(this.data["obj"]);
	}
	else if (document.all)
	{
		return document.all[this.data["obj"]];
	}
	else if (document.layers)
	{
		return document.layers[this.data["obj"]];
	}
	else
	{
		return null;
	}
}
Clock.count = 0
