﻿//Globals
var APP_VERSION="1.0"; 
//-Browser---------------------------------------------------------------
function browser(){}
browser.prototype.GetBrowser=function(){
	var nPos;
	if (navigator.userAgent.indexOf("Firefox")!=-1) {
		this.sName="FIREFOX";
		nPos=navigator.userAgent.indexOf("Firefox");
		this.nVersion=parseInt(navigator.userAgent.substr(nPos+8));
	} else if (navigator.userAgent.indexOf("MSIE")!=-1) {
		this.sName="MSIE";
		nPos=navigator.userAgent.indexOf("MSIE");
		this.nVersion=parseInt(navigator.userAgent.substr(nPos+5));
	} else {
		this.sName=navigator.appName;
		this.nVersion=parseFloat(navigator.appVersion);
	}
};
//-JSonP-----------------------------------------------------------------
var pkario={};
pkario.jdCall=function(){
	this.cb=null;
	this.oSrc=null;
	this.oTo=null;
}
pkario.inProduction=function(){
	return !(document.domain=="localhost" || document.domain=="test");
}
pkario.jd=function(){
	this.oCbs={};
	this.nCounter=0;
    if (document.domain=="localhost") {
	    this.base="http://localhost:50461/BuildingWeb/BLDServer/jd.aspx";
    } else if (document.domain=="test") {
	    this.base="http://test/insServer/BLDServer/jd.aspx";
	} else {
	    //this.base="http://62.103.212.194/insMoney/jd.aspx";//old pksoft
	    //this.base="http://212.70.216.52/insMoney/WFServer/jd.aspx"; //aegaleo
	    this.base="http://79.129.44.153/insMoney/WFServer/jd.aspx";  //ins
	    //this.base="http://83.235.21.39/insMoney/WFServer/jd.aspx";  //ins
	}
	this.nTimeOut=200000;
	this.send=function(callback,sQry){
		var sId="cb"+(++this.nCounter);
		var url=this.base;
		url+="?callback=oJd.oCbs."+sId+"&"+encodeURI(sQry);
		url+="&dt="+new Date().getTime().toString();
		var oScr=document.createElement("script");
		var oTo=setTimeout(function(){cleanup(sId,oScr);callback(null);},this.nTimeOut);
		var cleanup=function(sId0,oScr0){delete oJd.oCbs[sId0];setTimeout(function(){document.body.removeChild(oScr0);},0)};
		this.oCbs[sId]=function(oResult){
			clearTimeout(oTo);
			//this.cleanup(sId,oScr);
			delete this[sId];
			//setTimeout(function(){document.body.removeChild(oScr);},0);
			document.body.removeChild(oScr);
			callback(oResult);
		};
		document.body.appendChild(oScr);
		oScr.type="text/javascript";
		oScr.src=url;
	};
	/*
	this.cleanup=function(sId,oScr){
		delete this.oCbs[sId];
		setTimeout(function(){document.body.removeChild(oScr);},0);
	};*/
};
//-----------------------------------------------------------------------
//-Ajax------------------------------------------------------------------
function post(sData, CB){
   var req = createXMLHttpRequest();
   req.open("post", "pk.aspx", true);
   //req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   req.setRequestHeader("Content-Type", "multipart/form-data");
   req.setRequestHeader("Content-Length", sData.length);
   req.setRequestHeader("Connection", "close");
   req.onreadystatechange = function() {
     if (req.readyState == 4) CB(req.responseText);
   };
   req.send(sData);
}
function createXMLHttpRequest() {
   try { return new XMLHttpRequest(); } catch(e) {}
   try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
   try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
   alert("XMLHttpRequest not supported");
   return null;
}
/*
function JSONP () {
    this.requests = {};
    this.head = document.getElementsByTagName('head')[0];

    this.executeRequest = function (jsonpURI) {
        var script         = document.createElement('script');
            script.type    = 'text/javascript';
            script.charset = 'utf-8';
            script.src     = jsonpURI;

        this.head.appendChild(script);
        this.requests[jsonpURI] = script;
    };

    this.removeRequest = function (jsonpURI) {
        this.head.removeChild(this.requests[jsonpURI]);
        delete this.requests[jsonpURI];
    };
}
var JsonPadding = function() {};
JsonPadding.requestCounter = 0;
JsonPadding.responseCallbacks = [];
JsonPadding.headElem = document.getElementsByTagName('head').item(0);
JsonPadding.invoke = function (url, func) {
	var jsonpParam = arguments[2] || 'jsonp';
	var script = document.createElement('script');
	var index = JsonPadding.requestCounter++;
	JsonPadding.responseCallbacks[index] = (function(callback) {
		return function (responseObj) {
			delete JsonPadding.responseCallbacks[index];
			callback(responseObj);
			script.parentNode.removeChild(script);
		};
	})(func);
	var callUrl = url.indexOf('?') > 0 ? url+'&' : url+'?';
	callUrl += jsonpParam+'='+escape('JsonPadding.responseCallbacks['+index+']');
	callUrl += '&salt='+Math.random()+'_'+new Date().getTime();
	script.src = callUrl;
	script.type = 'text/javascript';
	script.charset = 'utf-8';
	JsonPadding.headElem.appendChild(script);
}
*/
//-DOM------------------------------------------------------------------
function $(sId) {return document.getElementById(sId);}
if (parent!=self) top.location.href=location.href;
function c$(sTag,sInputType){
	var o=document.createElement(sTag);
	if (sTag=="input" && sInputType!=undefined)	o.type=sInputType;
	return o;
}
function s$(sId, sVal){
	var o=$(sId);
	if (o!=null) o.innerHTML=sVal;
}
function u$(sVal){return encodeURIComponent(sVal);}
if (!window.XMLHttpRequest) { 
   window.XMLHttpRequest = function() { 
       return new ActiveXObject("Microsoft.XMLHTTP"); 
   }; 
} 
function cbo$(sId,oVals){
	var oOpt, oVal;
	var oCbo=c$("select");
	oCbo.id=sId;
	for(var nVal in oVals){
		oVal=oVals[nVal];
		oOpt=oCbo.appendChild(c$("option"));
		oOpt.value=oVal[0];
		oOpt.text=oVal[1];
	}
	return oCbo;
}
var DOM={};
DOM.getElementPosition=function(sId) {
    var oEl = $(sId);
    var offsetLeft = 0;
    var offsetTop = 0;
    while (oEl) {
        offsetLeft += oEl.offsetLeft;
        offsetTop += oEl.offsetTop;
        oEl = oEl.offsetParent;
    }
    oEl = $(sId);
    return {left:offsetLeft, top:offsetTop, height:oEl.offsetHeight, width:oEl.offsetWidth};
}
DOM.setElementPosition=function(sId, nLeft, nTop){
	$(sId).style.left=nLeft;
	$(sId).style.top=nTop;
}
DOM.getCboTxt=function(cbo){
	return cbo.options[cbo.selectedIndex].text;
}
DOM.addCell=function(oRow,sHtm){
	var oCell=c$("td");
	oRow.appendChild(oCell);
	oCell.innerHTML=sHtm;
	return oCell;
}
DOM.addRow=function(oTab){
	var oRow=c$("tr");
	oTab.appendChild(oRow);
	return oRow;
}
/*
 * This function parses ampersand-separated name=value argument pairs from
 * the query string of the URL. It stores the name=value pairs in
 * properties of an object and returns that object. Use it like this:
 *
 * var args = getArgs( );  // Parse args from URL
 * var q = args.q || "";  // Use argument, if defined, or a default value
 * var n = args.n ? parseInt(args.n) : 10;
 */
DOM.getArgs=function() {
    var oArgs = new Object();
    var sQuery = location.search.substring(1);
    var oPairs = sQuery.split("&");
    for(var i = 0; i < oPairs.length; i++) {
        var nPos = oPairs[i].indexOf('=');
        if (nPos == -1) continue;
        var sArgName = oPairs[i].substring(0,nPos);
        var sValue = oPairs[i].substring(nPos+1);
        sValue = decodeURIComponent(sValue);
        oArgs[sArgName] = sValue;
    }
    return oArgs;
}
//-Date-----------------------------------------------------------------
Date.prototype.format1=function(sFormat){
	if (this==null) return "";
	var sVal =""
	var nDy = this.getDate(), nMo= this.getMonth()+1, nYr = this.getFullYear();
	switch (sFormat){
	case "d/M/yyyy": 		
		sVal = nDy.toString()+"/"+ nMo.toString() + "/" + nYr.toString();
		break;
	case "yyyyMMdd":
		sVal =	this.padLeft(nYr.toString(),"0",4)+ 
				this.padLeft(nMo.toString(),"0",2)+
				this.padLeft(nDy.toString(),"0",2);
		break;
	}
	return sVal;
}
Date.prototype.pkToString=function(sFormat){
	if (this==null) return "";
	var sVal =""
	var nDy = this.getDate(), nMo= this.getMonth()+1, nYr = this.getFullYear();
	switch (sFormat){
	case "d/M/yyyy": 		
		sVal = nDy.toString()+"/"+ nMo.toString() + "/" + nYr.toString();
		break;
	case "yyyyMMdd":
/*
		sVal =	this.padLeft(nYr.toString(),"0",4)+ 
				this.padLeft(nMo.toString(),"0",2)+
				this.padLeft(nDy.toString(),"0",2);
*/
		sVal =	nYr.toString().padLeft("0",4)+ 
				nMo.toString().padLeft("0",2)+
				nDy.toString().padLeft("0",2);
		break;
	}
	return sVal;
}
Date.prototype.sMonthNames = new Array(
'Ιανουαρίου','Φεβρουαρίου','Μαρτίου','Απριλίου','Μαΐου','Ιουνίου',
'Ιουλίου','Αυγούστου','Σεπτεμβρίου','Οκτωβρίου','Νοεμβρίου','Δεκεμβρίου');
Date.prototype.sDayNames = new Array('Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο');
Date.prototype.format = function(sFormat){
    if (!this.valueOf()) return '&nbsp;';
    var d = this;
    return sFormat.replace(/(yyyy|MMMM|MMM|MM|M|dddd|ddd|dd|d|hh|h|mm|m|ss|s|a\/p)/g,
        function($1) {
            switch ($1) {
            case 'yyyy': return d.getFullYear();
            case 'MMMM': return gsMonthNames[d.getMonth()];
            case 'MMM':  return gsMonthNames[d.getMonth()].substr(0, 3);
            case 'MM':   return (d.getMonth() + 1).toString().padLeft("0",2);
            case 'M':    return (d.getMonth() + 1);
            case 'dddd': return gsDayNames[d.getDay()];
            case 'ddd':  return gsDayNames[d.getDay()].substr(0, 3);
            case 'dd':   return d.getDate().toString().padLeft("0",2);
            case 'd':    return d.getDate();
            case 'hh':   return ((h = d.getHours() % 12) ? h : 12).toString().padLeft("0",2);
            case 'h':    return ((h = d.getHours() % 12) ? h : 12);
            //case 'mm':   return d.getMinutes().toString().padLeft("0",2);
            //case 'm':    return d.getMinutes();
            case 'ss':   return d.getSeconds().toString().padLeft("0",2);
            case 's':    return d.getSeconds();
            case 'a/p':  return d.getHours() < 12 ? 'πμ' : 'μμ';
            }
        }
    );
}
Date.prototype.parseExact=function(sDt,sFormat){
    var nMo, nDy, nYr;
	var sDelim, nDelim1, nDelim2;
	if (sFormat=="d/M/yyyy" || sFormat=="dd/MM/yyyyy"){
		sDelim="/";
		nDelim1 = sDt.indexOf(sDelim);
		nDelim2 = sDt.lastIndexOf(sDelim);
		nDy = parseInt(sDt.substring(0, nDelim1), 10);
		nMo = parseInt(sDt.substring(nDelim1+1, nDelim2), 10);
		nYr = parseInt(sDt.substring(nDelim2+1), 10);
	} else if (sFormat=="yyyyMMdd"){
		nDy =parseInt(sDt.substr(6,2),10);
		nMo =parseInt(sDt.substr(4,2),10);
		nYr =parseInt(sDt.substr(0,4),10);
	}
	this.setDate(1);
	this.setMonth(0);
	this.setFullYear(nYr);
	this.setMonth(nMo-1);
	this.setDate(nDy);
}
Date.pkParse=function(sDt) {
    var mo, day, yr;
    var reLong = /\b\d{1,2}[\.\/-]\d{1,2}[\.\/-]\d{4}\b/;
    var reShort = /\b\d{1,2}[\.\/-]\d{1,2}[\.\/-]\d{2}\b/;
	var reCompact = /\b\d{6}\b/;
	var reCompactFull = /\b\d{8}\b/;
	//debugger;
	if (reCompact.test(sDt)){
		day=parseInt(sDt.substring(0,2),10);
		mo =parseInt(sDt.substring(2,4),10);
		yr =parseInt(sDt.substring(4,6),10);
	} else if (reCompactFull.test(sDt)){
		day=parseInt(sDt.substring(0,2),10);
		mo =parseInt(sDt.substring(2,4),10);
		yr =parseInt(sDt.substring(4,8),10);
	} else if ((reLong.test(sDt)) || (reShort.test(sDt))){
		var sDelim;
		if (sDt.indexOf("/") != -1) {
			sDelim= "/";
		} else if (sDt.indexOf("-") != -1) {
			sDelim= "-";
		} else if (sDt.indexOf(".") != -1) {
			sDelim= ".";
		} else {
			return null;
		}
		var delim1 = sDt.indexOf(sDelim);
		var delim2 = sDt.lastIndexOf(sDelim);
		day = parseInt(sDt.substring(0, delim1), 10);
		mo = parseInt(sDt.substring(delim1+1, delim2), 10);
		yr = parseInt(sDt.substring(delim2+1), 10);
	} else {
		return null;
	}
    if (yr < 100) {     // handle two-digit year
        var today = new Date(); // get current century floor (e.g., 2000)        
        var currCent = parseInt(today.getFullYear() / 100) * 100;        
        var threshold = (today.getFullYear() + 15) - currCent;// two digits up to this year + 15 expands to current century
        if (yr > threshold) yr -= 100;
        yr += currCent;
	}
    var dTest = new Date(yr, mo-1, day);
    if ((dTest.getDate() == day) && 
			(dTest.getMonth() + 1 == mo) && 
			(dTest.getFullYear() == yr)){
		return dTest;
	} else {
		return null;
	}
}
//-Number---------------------------------------------------------------
Number.prototype.sDecimalPoint=",";
Number.prototype.sGroupSeparator=".";
Number.prototype.format=function (nDecPlaces) {
    if (isNaN(this)) return "NaN";

        var sNum = "" + Math.round (this * Math.pow(10,nDecPlaces));
        if (sNum.indexOf("e") != -1) return "Out of Range";
        while (sNum.length <= nDecPlaces) sNum = "0" + sNum;
        var nDecPoint = sNum.length - nDecPlaces;
		var s1=sNum.substring(0,nDecPoint);
		var s2=sNum.substring(nDecPoint,sNum.length);

		var re = /(-?\d+)(\d{3})/;
		while (re.test(s1)) {
			s1 = s1.replace(re, "$1"+this.sGroupSeparator+"$2");
		}
        return s1 + (s2==""?"":(this.sDecimalPoint + s2));
}

Number.prototype.pkToString=function(nDecPlaces,sLang) {
	//sLang:en,gr
	var sGroupSeparator= ",";
	var sDecimalPoint=".";
	if (sLang=="gr"){
		sGroupSeparator= ".";
		sDecimalPoint=",";
	}		

    if (isNaN(this)) return "NaN";
    var sNum = "" + Math.round (this * Math.pow(10,nDecPlaces));
    if (sNum.indexOf("e") != -1) return "Out of Range";
    while (sNum.length <= nDecPlaces) sNum = "0" + sNum;
    var nDecPoint = sNum.length - nDecPlaces;
	var s1=sNum.substring(0,nDecPoint);
	var s2=sNum.substring(nDecPoint,sNum.length);

	var re = /(-?\d+)(\d{3})/;
	while (re.test(s1)) {
		s1 = s1.replace(re, "$1"+sGroupSeparator+"$2");
	}
    return s1 + (s2==""?"":(sDecimalPoint + s2));
}
Number.pkParse=function(sVal, sLang, bFixNaN){
	var reGrp,reDec,sDec, nVal;
	if (typeof bFixNaN=="undefined") bFixNaN=false;
	if (sLang=="gr"){
		reGrp=/\./g;
		reDec=/,/g;
	} else {
		reGrp=/,/g;
		reDec=/\./g;
	}		
	sVal=sVal.replace(reGrp,"");
	sVal=sVal.replace(/,/g,".");
	if (sVal.indexOf(".")==-1){
		nVal = parseInt(sVal,10);
	} else {
		nVal=parseFloat(sVal);
	}
	if (bFixNaN && isNaN(nVal)) nVal=0;
	return nVal;
}
//-String---------------------------------------------------------------
String.prototype.padLeft=function(sPaddingChar, nMinLength){
	var s=this;
	while (s.length<nMinLength) s=sPaddingChar+s;
	return s;
}
//----------------------------------------------------------------------

//----------------------------------------------------------------------
function pkUtils(){
	//DHTML
	// string
	this.padLeft=function(sVal, sPad, nLen){
		while (nLen>sVal.length) sVal = sPad+sVal;
		return sVal;
	}
	this.padRight=function(sVal, sPad, nLen){
		while (nLen>sVal.length) sVal += sPad;
	}
	this.isNumber=function(s){
		s=s.replace(/\./g, "");
		s=s.replace(/,/,".");
		return !isNaN(parseFloat(s));		
	}
	this.isInteger=function(s){
		return !isNaN(parseInt(s));		
	}
	//date
	this.isDate=function(s){
		return !(this.parse(s)==null);
	}
	this.format=function(dVal,sFormat){
		if (dVal==null) return "";
		var sVal =""
		var nDy = dVal.getDate(), nMo= dVal.getMonth()+1, nYr = dVal.getFullYear();
		switch (sFormat){
		case "d/M/yyyy": 		
			sVal = nDy.toString()+"/"+ nMo.toString() + "/" + nYr.toString();
			break;
		case "yyyyMMdd":
			sVal =	this.padLeft(nYr.toString(),"0",4)+ 
					this.padLeft(nMo.toString(),"0",2)+
					this.padLeft(nDy.toString(),"0",2);
			break;
		}
		return sVal
	}
	this.parse=function(sDt){
		var mo, day, yr;
		var reLong = /\b\d{1,2}[\.\/-]\d{1,2}[\.\/-]\d{4}\b/;
		var reShort = /\b\d{1,2}[\.\/-]\d{1,2}[\.\/-]\d{2}\b/;
		var reCompact = /\b\d{6}\b/;
		var reCompactFull = /\b\d{8}\b/;
		//debugger;
		if (reCompact.test(sDt)){
			day=parseInt(sDt.substring(0,2),10);
			mo =parseInt(sDt.substring(2,4),10);
			yr =parseInt(sDt.substring(4,6),10);
		} else if (reCompactFull.test(sDt)){
			day=parseInt(sDt.substring(0,2),10);
			mo =parseInt(sDt.substring(2,4),10);
			yr =parseInt(sDt.substring(4,8),10);
		} else if ((reLong.test(sDt)) || (reShort.test(sDt))){
			var sDelim;
			if (sDt.indexOf("/") != -1) {
				sDelim= "/";
			} else if (sDt.indexOf("-") != -1) {
				sDelim= "-";
			} else if (sDt.indexOf(".") != -1) {
				sDelim= ".";
			} else {
				return null;
			}
			var delim1 = sDt.indexOf(sDelim);
			var delim2 = sDt.lastIndexOf(sDelim);
			day = parseInt(sDt.substring(0, delim1), 10);
			mo = parseInt(sDt.substring(delim1+1, delim2), 10);
			yr = parseInt(sDt.substring(delim2+1), 10);
		} else {
			return null;
		}
		if (yr < 100) {     // handle two-digit year
			var today = new Date(); // get current century floor (e.g., 2000)        
			var currCent = parseInt(today.getFullYear() / 100) * 100;        
			var threshold = (today.getFullYear() + 15) - currCent;// two digits up to this year + 15 expands to current century
			if (yr > threshold) yr -= 100;
			yr += currCent;
		}
		var dTest = new Date(yr, mo-1, day);
		if ((dTest.getDate() == day) && 
				(dTest.getMonth() + 1 == mo) && 
				(dTest.getFullYear() == yr)){
			return dTest;
		} else {
			return null;
		}
	}
}
