﻿

//#############################################################################
//#############################################################################
//#############################################################################
// ATTACH

function AttachEvent(oControl,sName,oFunction) {
	if ((oControl != window) && (oControl != window.document) && (oControl.tagName == null)) {
	    oControl = document.getElementById(oControl)
	}    
	if (oControl.attachEvent != null) {
	    oControl.attachEvent("on" + sName,oFunction)
	} else if (oControl.addEventListener != null) {
	    oControl.addEventListener(sName,oFunction,true)
	}    
}

//#############################################################################
//#############################################################################
//#############################################################################
// DOM

var ElementPrefix = null
function GetElement(sName,oWindow) {
    if (oWindow == null) oWindow = window
    //try direct
    var ct = oWindow.document.getElementById(sName)
    if (ct != null) return ct
    //get prefixes
    if (ElementPrefix == null) {
        ElementPrefix = new Array()
        var All = (oWindow.document.all) ? oWindow.document.all : oWindow.document.getElementsByTagName("*")
        for (var i=0;i<All.length;i++) {
            var ct = All[i] 
            var Name = (ct.name || "") + ""
            var ar = Name.split("$")
            if (ar.length > 1) {
                ar.pop()
                var p = ar.join("_")
                var b = false
                for (var j=0;j<ElementPrefix.length;j++) {
                    if (ElementPrefix[j].toLowerCase() == p.toLowerCase()) { b = true; break }
                }
                if (b == false) ElementPrefix[ElementPrefix.length] = p
            }
        }   
    }    
    //try prefixes
    for (var i=0;i<ElementPrefix.length;i++) {
        var ct = oWindow.document.getElementById(ElementPrefix[i] + "_" + sName)
        if (ct != null) return ct
    }
    //try simple
    var All = (oWindow.document.all) ? oWindow.document.all : oWindow.document.getElementsByTagName("*")
    for (var i=0;i<All.length;i++) {
        var ct = All[i] 
        var ID = (ct.id || "") + ""
        if ((ID != "") && (ID.substring(ID.length-sName.length - 1).toLowerCase() == ("_" + sName.toLowerCase()))) {
            return ct            
        }    
    }
    return null
}
function GetElementLeft(ct) {
    var c = 0
    while (ct != null) {
        if (ct.offsetLeft != null) c += ct.offsetLeft
        ct = ct.offsetParent
    }
    return c
}
function GetElementTop(ct) {
    var c = 0
    while (ct != null) {
        if (ct.offsetTop != null) c += ct.offsetTop
        ct = ct.offsetParent
    }
    return c
}
function GetElementWidth(ct) {
	return ct.offsetWidth
}
function GetElementHeight(ct) {
	return ct.offsetHeight
}
function GetFrame(sName,oWindow) {
	if (oWindow == null) oWindow = window
	var ct = oWindow.frames[sName] || oWindow.document.getElementById(sName)
	return ct
}
function GetFrameDocument(oFrame) {
	var doc = oFrame.contentDocument || oFrame.document
	return doc
}
function AttachEvent(oControl,sName,oFunction) {
	if ((oControl != window) && (oControl != window.document) && (oControl.tagName == null)) {
        oControl = document.getElementById(oControl)
	}    
	sName = sName.toLowerCase()
	sName = sName.replace("on","")
	if (oControl.attachEvent != null) {
        oControl.attachEvent("on" + sName,oFunction)
	} else if (oControl.addEventListener != null) {
        oControl.addEventListener(sName,oFunction,true)
	}    
}
function DetachEvent(oControl,sName,oFunction) {
	if ((oControl != window) && (oControl != window.document) && (oControl.tagName == null)) {
        oControl = document.getElementById(oControl)
	}    
	sName = sName.toLowerCase()
	sName = sName.replace("on","")
	if (oControl.detachEvent != null) {
        oControl.detachEvent("on" + sName,oFunction)
	} else if (oControl.removeEventListener != null) {
        oControl.removeEventListener(sName,oFunction,false)
	}	    
}
var CurrentEvent= null
function GetEvent(evt,win) {
    var evt = CurrentEvent || evt || (win || window).event
    return evt
}
function GetEventKeyCode(evt,win) {
	var evt = GetEvent(evt,win)
	return evt.keyCode
}
function GetEventCtrlKey(evt,win) {
	var evt = GetEvent(evt,win)
	return evt.ctrlKey
}
function GetEventShiftKey(evt,win) {
	var evt = GetEvent(evt,win)
	return evt.shiftKey
}
function GetEventTagName(evt,win) {
	var evt = GetEvent(evt,win)
	var target = evt.target || evt.srcElement
	return target.tagName
}
function GetEventElement(evt,win) {
	var evt = GetEvent(evt,win)
	var target = evt.target || evt.srcElement
	return target
}
function GetEventID(evt,win) {
	var evt = GetEvent(evt,win)
	var target = evt.target || evt.srcElement
	return target.id
}
function CallClick(el) {
	if (el.click) {
        el.click()
	} else if (el.onclick) {
        el.onclick()
	}	
}
function GetProp(el,sSeparator,bValue) {
    if (sSeparator == null) sSeparator = " "
	var s = ""
	for (a in el) {
        s += a
        s += (bValue == true) ? ("=" + el[a]) : ""
        s += sSeparator
	}    
	return s
}

//#############################################################################
//#############################################################################
//#############################################################################
// INTEGER

function TextToInteger(s) {
	if (s == null) s = ""
	var c = "0123456789"
	var b = (s.indexOf("-") != -1) 
	var r = ""
	for (var i=0;i<s.length;i++) {
		if (c.indexOf(s.charAt(i)) != -1) {
			r += s.charAt(i)	
		}
	}
	r = parseFloat(r); if (isNaN(r) == true) r = 0  
	r = parseInt(r); if (isNaN(r) == true) r = 0  
	if (b == true) r *= -1 	
	return r
}
function IntegerToText(x,Sign,Thousand) {
    if (x == null) x = ""; x += ""
    if (Thousand == null) Thousand = false
	if (Thousand == true) {
		var c = (Sign == ".") ? "," : "."
		var s = x
		var r = ""
		for (var i=0;i<s.length;i++) {
			if (((i % 3) == 0) && (i > 0)) r = c + r	
			r = s.charAt(s.length-1-i) + r
		}
		x = r 
	}
    return x
}
function GetNum(x) {
    return ((x < 10) ? "0" : "") + x
}

//#############################################################################
//#############################################################################
//#############################################################################
// DOUBLE

function TextToDouble(s) {
	if (s == null) s = ""; s += ""
	var c = "0123456789,."
	var b = (s.indexOf("-") != -1) 
	var r = ""
	for (var i=s.length-1;i>=0;i--) {
		if (c.indexOf(s.charAt(i)) != -1) {
			if ((s.charAt(i) == ".") || (s.charAt(i) == ",")) { c = c.replace(".",""); c = c.replace(",","") }
			r = s.charAt(i) + r	
		}
	}
	r = r.replace(",",".")
	r = parseFloat(r); if (isNaN(r) == true) r = 0
	if (b == true) r *= -1 
	return r
}
function DoubleToText(d,Sign,Thousand,Digits) {
	d = parseFloat(d); if (isNaN(d) == true) d = 0
	var n = (d < 0)
	if (Sign == null) Sign = "."
	if (Thousand == null) Thousand = false
	if (Digits == null) Digits = 1
	d += ""; d = d.replace(".",Sign); if (d.indexOf(Sign) == -1) d += Sign + "0"; d = d.replace("-","")
	var ar = d.split(Sign)
	if (Thousand == true) {
		var c = (Sign == ".") ? "," : "."
		var s = ar[0]
		var r = ""
		for (var i=0;i<s.length;i++) {
			if (((i % 3) == 0) && (i > 0)) r = c + r	
			r = s.charAt(s.length-1-i) + r
		}
		ar[0] = r
	}
	var s = ar[1]
	while (s.length < Digits) s += "0"
	ar[1] = s
	d = ar.join(Sign)
	if (n == true) d = "-" + d
	return d
}

//#############################################################################
//#############################################################################
//#############################################################################
// STRING

function Trim(s) {
    if (s == null) s = ""; s += ""
    while ((s.length > 0) && (s.charAt(0) == " ")) s = s.substring(1, s.length)
    while ((s.length > 0) && (s.charAt(s.length-1) == " ")) s = s.substring(0, s.length-1) 
    return s
}
function Space(iLength,sSpace) {
    iLength = iLength || 1
    sSpace = sSpace || " "
    var s = ""; for (var i=1;i<=iLength;i++) s += sSpace
    return s
}

//#############################################################################
//#############################################################################
//#############################################################################
// SELECT

function GetSelectValue(oSelect, sDefault) {
	if (oSelect.selectedIndex == -1) return sDefault 
	return oSelect.options[oSelect.selectedIndex].value
} 
function ShowSelectValue(oSelect, sValue) {
	for (var i=0;i<oSelect.options.length;i++) {
		if (oSelect.options[i].value == sValue) {
			oSelect.selectedIndex = i
			break
		}	
	}	
} 

//#############################################################################
//#############################################################################
//#############################################################################
// DATE

function ToDate(s, AsDate) {
	if (s == null) s = ""
	s = Trim(s)
	while (true) {
		var t = s
		t = t.replace("  "," ")
		t = t.replace(".","-")
		t = t.replace("\/","-")
		t = t.replace("\\","-")
		t = t.replace(":","-")
		if (t == s) break
		s = t 
	}
	while (true) {
		var t = s
		t = t.replace(" ","-")
		if (t == s) break
		s = t 
	}
	var ar = s.split("-")
	ar.length = 3
	for (var i=0;i<ar.length;i++) {
		var s = ar[i]
		if (s == null) s = ""
		while ((s.length > 1) && (s.charAt(0) == "0")) s = s.substring(1, s.length) 
		ar[i] = parseInt(s)
	}
	var d = new Date()
	if (isNaN(ar[0]) == true) ar[0] = d.getDate()		
	if (isNaN(ar[1]) == true) ar[1] = d.getMonth()+1		
	if (isNaN(ar[2]) == true) ar[2] = d.getFullYear()		
	if (ar[2] < 50) ar[2] += 2000	
	if (ar[2] < 100) ar[2] += 1900	
	if (ar[2] < 1900) ar[2] = 1900	
	if (ar[2] > 2100) ar[2] = 2100	
	d.setDate(ar[0])
	d.setMonth(ar[1]-1)
	d.setFullYear(ar[2])
	return d
}
function ToDateText(s) {
    var d = ToDate(s)
	return ((d.getDate()<10)?"0":"") +  d.getDate() + "-" + ((d.getMonth()+1<10)?"0":"") + (d.getMonth()+1) + "-" + d.getFullYear()
}

//#############################################################################
//#############################################################################
//#############################################################################

function GetHttp(sURL,oData) { 
	try {
		var oHttp = (window.XMLHttpRequest != null) ? (new XMLHttpRequest()) : (new ActiveXObject("MSXML2.XMLHTTP"))
		oHttp.open((oData == null) ? "GET" : "POST", sURL, false)
		oHttp.send(oData)
		if (oHttp.status == 200) return oHttp.responseText
		throw ("http error status: " + oHttp.status)
	} catch(e) {
	    alert(e.message || e)
	}	
}

//#############################################################################
//#############################################################################
//#############################################################################
// POPUP DISPLAY

function InitPopupArea() {
    window.document.write("<div id=\"PopupArea\" style=\"position:absolute;z-index:100;display:none\"><\/div>")
}
//if (window.document != null) InitPopupArea()
function ShowPopupArea(x,y,w,h,html) {
	var ct = GetElement("PopupArea")
	if (ct == null) return
	ct.style.left = x
	ct.style.top = y
	ct.style.width = w
	ct.style.height = h
	ct.style.display = ""
	ct.innerHTML = html
}
function HidePopupArea() {
	var ct = GetElement("PopupArea")
	if ((ct == null) || (ct.style.display == "none")) return
	ct.innerHTML = ""
	ct.style.display = "none"
}
function PopupAreaKeyUp(evt) {
	var ct = GetElement("PopupArea")
	var k = GetEventKeyCode(evt)
	if ((ct == null) || (ct.style.display == "none")) return
	if (k == 27) ct.style.display = "none"
}
function PopupAreaMouseDown(evt) {
	var ct = GetElement("PopupArea")
	if ((ct == null) || (ct.style.display == "none")) return
	var el = GetEventElement(evt)
	while (el != null) {
		if (ct == el) return
		el = el.parentNode
	}	
	ct.style.display = "none"
}
if (window.document != null) AttachEvent(window.document,"keyup",PopupAreaKeyUp)
if (window.document != null) AttachEvent(window.document,"mousedown",PopupAreaMouseDown)

//#############################################################################
//#############################################################################
//#############################################################################
// REG EXP

function CheckPattern(sPattern,sString) {
    var re = new RegExp(sPattern)
    re.global = true
    re.ignoreCase = false		
    return (sString.match(re) != null)
} 
function CheckEmail(sEmail) {
    try {
        //var sPattern = "^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"	
        var sPattern = "^([a-zA-Z0-9_\\-])+(\\.([a-zA-Z0-9_\\-])+)*@((\\[(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))\\]))|((([a-zA-Z0-9])+(([\\-])+([a-zA-Z0-9])+)*\\.)+([a-zA-Z])+(([\\-])+([a-zA-Z0-9])+)*))$"
        return CheckPattern(sPattern,sEmail)
	} catch(e) {
		alert(e.message || e)
	}	
}
function CheckURL(sURL) {
    try {
        var sPattern =  "^(http|https|ftp):\\/\\/([\\w.]+\\/?)\\S*$"
        return CheckPattern(sPattern,sURL)
	} catch(e) {
		alert(e.message || e)
	}	
}
function CheckIP(sIP) {
    try {
        //var sPattern = "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
        var sPattern = "^(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$"
        return CheckPattern(sPattern,sIP)
	} catch(e) {
		alert(e.message || e)
	}	
}  

//#############################################################################
//#############################################################################
//#############################################################################

function ShowPrompt(msg,def,win) {
    win = win || window
    var r = "\n"; r = win.prompt(Space(150) + "\n" + msg + "\n" + Space(150),def || "")
    if (r == "\n") { 
        ShowAlert("Prompt is currently not supported. Activate active text scripting in your browser options !",win)    
        r = ""
    }    
    return r || ""
}
function ShowAlert(msg,win) {
    win = win || window
    win.alert(Space(150) + "\n" + msg + "\n" + Space(150))
}
function ShowConfirm(msg,win) {
    win = win || window
    var r = win.confirm(Space(150) + "\n" + msg + "\n" + Space(150))
    return (r == true)
}

//#############################################################################
//#############################################################################
//#############################################################################


