// WEII Core jQuery Library
// Loaded by default, accessiable at all times
var weii = {};
	weii.dateFormat = 'yyyymmdd';
	weii.date = new Date();
	weii.userid = -1;
	weii.rdx = 0;
	weii.sessionid = '';
	weii.loggedin = false;
	weii.groups = ',';
	weii.decpoints = 2;
	weii.hash = '';
	
weii.init = function () {
	weii.time = weii.date.getTime();
	weii.wex( {onSuccess: onLoaded, onError: onLoaded } );

	if (weshow) weii.triangle();

	function onLoaded() {
		weii.genEvent('load');
	}
	
	if ($('.addtocart').length>0 && weiicart == undefined) {
		weii.loadScript('/admin/weiicart.js',weii.initcart);
		//weii.initcart();
	}
	weii.checkhash();
}

weii.checkhash = function () {
	if (weii.hash!=window.location.hash) {
		weii.hash=window.location.hash;
		weii.genEvent('hash');
	}
	setTimeout( weii.checkhash, 500);
	
	// also do "auto-logout" here? reset a time every time status is read as logged in, 
	// when timer elapses (6 hours? otherwise it will stay logged in?) , check wex status and log out if necessary? will auto?
}

weii.initcart = function() {
	if (weiicart != undefined) {
		weiicart.init();
	}
}

weii.log = function(msg) {
	//if (console!=undefined) console.log(msg);
	try {
		console.log(msg);
	}
	catch (e) {
	}
}
weii.logError = function (err) {
	var s = '';
	for (v in err) {
		if(err.hasOwnProperty(v)){
			s += v +': '+err[v]+String.fromCharCode(10);
		}
	}
	alert(s);
}
weii.genEvent = function (eventType) {
	for (h=0;h<weii.eventlist.length;h++) {
		var eh = weii.eventlist[h];
		if (eh.type==eventType) {
			try {
				//alert(eh.handler);
				//eval(eh.handler);
				eh.handler(eh.par);
			}
			catch (err) {
				// just silence any errors for now? Later can add a WEII error handler module
				weii.logError(err);
			}
		}
	}
}

weii.loginManager = function (stat) {
	if (stat.rectype=='status') {
		var prevuserid = weii.userid;
		weii.userid = eval(stat.userid);
		weii.sessionid = stat.sessionid;
		weii.cookie('weiisession',weii.sessionid);
		if (stat._grps==undefined) stat._grps = '';
		weii.groups = stat._grps+',';
		try {
			weii.rdx = eval(stat.rdx);
		}
		catch (e) {
		}
		weii.loggedin = (weii.userid>0);
		if (prevuserid!=weii.userid) { // A login change occured
			weii.genEvent('login');
		}
	}
}

weii.makefilename = function(fn,ext) {
	var vfn = '';
	var ch;
	fn = fn.toLowerCase();
	for (var c=0;c<fn.length;c++) {
		ch = fn.charAt(c);
		if (ch>='a' && ch<='z') vfn += ch
		else 
		if (ch>='0' && ch<='1') vfn += ch
		else
		switch(ch) {
			case ' ':
				vfn += '_';
				break;
			case '_':
			case '-':
			case '.':
				vfn += ch;
				break;
		}
	}
	
	var d = vfn.length - ext.length;
    if (!(d >= 0 && vfn.lastIndexOf(ext) == d)) vfn += ext;	
	return vfn;
}

weii.wex = function (p) {
	// p is an object {}
	// p.cmd
	// p.data
	// p.onSuccess
	// p.onError
	// p.method?
	// set defaults
	if (p==undefined) p = {};
	if (p.cmd==undefined || p.cmd=='') p.cmd='status';
	if (p.exe!=1)
		p.cmd += '.wex';
	if (p.data==undefined) p.data={};
	p.data._weid = weii.sessionid;
	var sesscookie = weii.cookie('weiisession');
	if (p.data._weid=='' && sesscookie!='null') {
		p.data._weid = sesscookie;
	}
	
	$.ajax({
		type:		"POST",
		url: 		p.cmd, //"/fl.ewx",
		data: 		p.data,
		dataType:	"json",
		error:		function (e) {
			/*
			if (e.statusText=='OK') {
				var results = eval("(" + e.responseText + ")");
				if (results!=undefined && results.length>0)
					weii.loginManager(results[0]);
				if (p.onSuccess!=undefined && $.isFunction(p.onSuccess)) {
					p.onSuccess(results);
				}
			} else
			*/
			if (p.onError!=undefined && $.isFunction(p.onError)) {
				p.onError(e);
			}
		},
		success:	function (data) {
			try {
				if (data.results!=undefined && data.results.length>0)
					weii.loginManager(data.results[0]);
				if (p.onSuccess!=undefined && $.isFunction(p.onSuccess)) {
					// do login status check here and call event handlers
					p.onSuccess(data.results);
				}
			}
			catch (err) { }
			
		}
	});
	
}

weii.now = function () {

		function pad(v) {
			v = ''+v;
			if (v.length<2) v = '0'+v;
			return v;
		}

	var dt = new Date();
	tm = dt.getTime();
	var yyyy = ''+dt.getFullYear();
	var mm = pad(dt.getMonth()+1);	
	var dd = pad(dt.getDate());	
	var hh = pad(dt.getHours());	
	var nn = pad(dt.getMinutes());	
	var ss = pad(dt.getSeconds());	
	return yyyy+mm+dd+hh+nn+ss;
}

weii.xdate = function (dt) {
	if (dt==undefined) dt='';
	while (dt.length<14) dt += '0';
	var d = dt.substr(6,2)+'/'+dt.substr(4,2)+'/'+dt.substr(0,4);
	return d;
}
weii.xtime = function (dt) {
	if (dt==undefined) dt='';
	while (dt.length<14) dt += '0';
	var d = dt.substr(8,2)+':'+dt.substr(10,2);
	return d;
}
weii.nu = function (v,def) {
	if (v==undefined) v = def;
	if (v==undefined) v = '';
	return v;
}
weii.enc = function (s) {
	var e = '';
	if (s==undefined) s = '';
	for (i=0;i<s.length;i++) {
		var c = s.charCodeAt(i)+weii.rdx;
		while (c>=256) c -= 256;
		var cc = c.toString(16);
		if (c<16) cc = '0'+cc;
		e += ''+cc;
	}
	return e;
}

weii.escape = function (v) {
	if (v!=undefined) {
		v = ''+v;
		v = v.replace(/"/g,'#34#');
		v = v.replace(/'/g,'`');
	}
	return v;
}

weii.unescape = function (v) {
	v = v.replace(/#34#/g,'"');
	return v;
}

weii.asDollar = function (value,incSymbol) {
	var dp = 2;
	var mp = 100;
	while (dp<weii.decpoints) {
		dp++;
		mp *= 10;
	}
	try {
		value = ""+value;
		value = value.replace(/\$/g,'');
		value = value.replace(/\,/g,'');
		value = eval(value)*mp;
		value = Math.floor(value);
		var s = ''+value;
		while (s.length<=dp) s = '0'+s;
		s = s.substr(0,s.length-dp)+'.'+s.substr(s.length-dp,dp);
		var cp = 5+dp;
		while (s.length>=cp) {
			s = s.substr(0,s.length-cp+1)+','+s.substr(s.length-cp+1,cp-1);
			cp += 4;
		}
	}
	catch (err) {
		s = '0.00';
	}
	return s;
	
	/*
	value = eval(value)*100;
	value = Math.floor(value);
	var s = ''+value;
	while (s.length<3) s = '0'+s;
	s = s.substr(0,s.length-2)+'.'+s.substr(s.length-2,2);
	var cp = 7;
	while (s.length>=cp) {
		s = s.substr(0,s.length-cp+1)+','+s.substr(s.length-cp+1,cp-1);
		cp += 4;
	}
	return s;
	*/
}

weii.signin = function (u, p , onLogin) {
	weii.username = u;
	weii.wex({ cmd:'user', data: {u: weii.enc(u), p: weii.enc(p) }, onSuccess: onLogin});
}

weii.showWE = function() {
	weii.we.css('opacity','1.0');
}

weii.triangle = function() {
	weii.we = $('<a href="#" style="position: fixed; z-index: 1000; padding: 0px; bottom: -10px; right: -2px;" class="we"><img src="/admin/welogin.png" /></a>');
	weii.we.appendTo($('body'));
	var wb = '<div style="display: none; position: fixed; bottom: 0px; right: 0px; z-index: 1001; width: 240px; background: #ddd; border: 1px solid black; padding: 0px">'+
			'<div style="padding: 5px; background: #222; color: #ddd; font-weight: bold;">'+
			'<a href="#" id="weboxclose" style="float:right;"><img src="/admin/RedX16.png"/></a>'+
			'<span id="weboxtitle"></span>'+
			'</div><div id="weboxcontent" style="padding: 10px;"></div>'+
			'<div style="border-top: 1px solid #888; color: #888; padding: 5px; text-align: right;">Powered by webEFEKTs.</div>'+
			'</div>';
	weii.webox = $(wb);
	weii.webox.appendTo($('body'));
	weii.weboxclose = $('#weboxclose');
	weii.weboxtitle = $('#weboxtitle');
	weii.weboxcontent = $('#weboxcontent');
	weii.we.css('opacity','0.1');
	
	weii.we.hover( function() {
		//weii.we.css('opacity','1.0');
		weii.weto = setTimeout( weii.showWE, 500);
	}, function () {
		weii.we.css('opacity','0.1');
		clearTimeout(weii.weto);
	} );
	
	weii.we.click( function(e) {
		e.preventDefault();
		weii.showwebox();
		
	});
	weii.weboxclose.click( function(e) {
		e.preventDefault();
		weii.webox.slideUp();
	});
	
}
weii.toggleEdits = function (lnk,onoff) {
	if (lnk.hasClass('yes') || onoff==false) {
		lnk.removeClass('yes');
		$('.editlink').remove();
		lnk.text('Enable Panel Edits');
		$('.panel').mouseenter( function() {
		}).mouseleave( function() {
		});
		
	} else {
		lnk.addClass('yes');
		lnk.text('Disable Panel Edits');
		$('.panel').mouseenter( function() {
			if (lnk.hasClass('yes')) {
				$(this).append($('<a href=".htmledit.we?fname='+$(this).attr('alt')+'.panel" target="_blank" title="Edit '+$(this).attr('alt')+'" class="editlink">EDIT</a>'));
			}
		}).mouseleave( function() {
			$('.editlink').remove();
		});
	}
}

weii.toggleCompEdits = function (lnk,onoff) {
	if (lnk.hasClass('yes') || onoff==false) {
		lnk.removeClass('yes');
		$('.editlink').remove();
		lnk.text('Enable Comp Edits');
		$('.weiicomp').mouseenter( function() {
		}).mouseleave( function() {
		});
		
	} else {
		lnk.addClass('yes');
		lnk.text('Disable Comp Edits');
		$('.weiicomp').mouseenter( function() {
			if (lnk.hasClass('yes')) {
				var editor = 'files';
				var fnparts = $(this).attr('alt').split('.');
				var type = fnparts[fnparts.length-1];
				switch (type) {
					case 'menu':
						editor = 'menuedit';
						break;
					case 'form':
						editor = 'formedit';
						break;
					case 'table':
						editor = 'tableedit';
						break;
				}
				$(this).append($('<a href=".'+editor+'.we?fn='+$(this).attr('alt')+'" target="_blank" title="Edit '+$(this).attr('alt')+'" class="editlink">EDIT</a>'));
			}
		}).mouseleave( function() {
			$('.editlink').remove();
		});
	}
}

weii.showwebox = function () {
	function addLink(link,desc) {
		//links += '<div><a href="'+link+'" target="_blank">'+desc+'</a></div>';
		links += '<div><a class="lks" href="#" alt="'+link+'" target="_blank">'+desc+'</a></div>';
	}
	weii.webox.slideDown().show();
	if (weii.userid>0) {
		weii.weboxtitle.text('webEFEKTs Control Centre');
		weii.weboxcontent.empty();
		var links = '';
		
		if (weii.groups.indexOf('admin,')>=0) {
			//addLink('.txtedit.we?fname='+wepage,'Edit page');
			addLink('.htmledit.we?fname='+wepage,'Edit page');
			addLink('.pagepreferences.we?fname='+wepage,'Edit page preferences');
			links += '<div><a class="newpage" href="#" >New Page</a> / <a class="copypage" href="#" >Copy Page</a></div>';
			links += '<div class="newpageinfo" style="display:none;"><input type="text" class="newpagename" />';
			links += '<input class="newgo" type="button" value="Go" /><input class="newx" type="button" value="X" /></div>';
			addLink('.files.we','File Manager');
			addLink('.db.we','DB Manager');
			addLink('.users.we','User Management');
			addLink('.crm.we','Client Management');
			addLink('.designer.we','Layout Designer');
			links += '<div><a class="edits" href="#" >Enable Panel Edits</a></div>';
			links += '<div><a class="compedits" href="#" >Enable Comp Edits</a></div>';
		}
		addLink('.preferences.we','Website Preferences');
		addLink('.guide.we','User Guide');
		weii.weboxcontent.append($(links));
		
		var lo = $('<div><a href="#">Logout</a></div>');
		weii.weboxcontent.append(lo);
		
		lo.click( function(e) {
			e.preventDefault();
			
			weii.wex({ cmd:'user', data: {c: 'lo' }, onSuccess: onLogout });
		
			function onLogout(results) {
				var stat = results[0];
				if (eval(stat.userid)>0) {
					weii.weboxtitle.text('Logout Failed');
				} else {
					weii.webox.slideUp();// weii.showwebox );
				}
			}
			
		});
		
		$('.edits').click( function(e) {
			e.preventDefault();
			weii.toggleCompEdits($('.compedits'),false);
			weii.toggleEdits($(this));
		});
		$('.compedits').click( function(e) {
			e.preventDefault();
			weii.toggleEdits($('.edits'),false);
			weii.toggleCompEdits($(this));
		});
		$('.newpage').click(function(e) {
			e.preventDefault();
			weii.newtemplate = '';
			$('.newpageinfo').slideDown();
		});
		$('.copypage').click(function(e) {
			e.preventDefault();
			weii.newtemplate = wepage;
			$('.newpageinfo').slideDown();
		});
		$('.newx').click(function() {
			$('.newpageinfo').slideUp();
		});
		$('.newgo').click(function() {
			$('.newpageinfo').slideUp();
			// create new page
			var fto = $('.newpagename').val();
			if (fto!='') 
				fto = weii.makefilename(fto,'.we');
			var data = { cmd:'copy', ffrom: weii.newtemplate, fto:fto };
			
			function onCopy(results) {
				weii.navtopage(fto);
			}
			weii.wex({ cmd:'files', data: data, onSuccess: onCopy});
		});
		
		$('.lks').click(function(e) {
			e.preventDefault();
			if (weii.editwindow==undefined || weii.editwindow.closed) {
				weii.editwindow = window.open($(this).attr('alt'));
			} else {
				weii.editwindow.location.pathname = $(this).attr('alt');
				weii.editwindow.focus();
			}
		});
		
		
	} else {
		weii.weboxtitle.text('Login');
		var li = '<div><input class="username" type="text" title="Username"/></div>'+
    			 '<div><input class="password" type="password" title="Password"/></div>'+
    			 '<div><input class="signin" type="button" value="Sign in" /></div>';
		weii.weboxcontent.html(li);
		//weiiforms.loginForm('horizontal_login1',{loginpage:'home.we', logoutpage: 'index.we'});
		weii.fieldHints('weboxcontent');
		var signin = $('#weboxcontent .signin');
		signin.click(function(e) {
			e.preventDefault();
			signin.attr('disabled','disabled').val('Signing In');
			//weii.wex({ cmd:'user', data: {u: weii.enc($('#weboxcontent .username').val()), p: weii.enc($('#weboxcontent .password')).val() }, onSuccess: onLogin});
			weii.signin($('#weboxcontent .username').val(), $('#weboxcontent .password').val() , onLogin);
		});
		
		$('#weboxcontent .username,#weboxcontent .password').keyup( function (e) {
			var code = (e.keyCode ? e.keyCode : e.which);
			 if(code == 13) { //Enter keycode
				signin.attr('disabled','disabled').val('Signing In');
				//weii.wex({ cmd:'user', data: {u: weii.enc($('#weboxcontent .username').val()), p: weii.enc($('#weboxcontent .password')).val() }, onSuccess: onLogin});
				weii.signin($('#weboxcontent .username').val(), $('#weboxcontent .password').val() , onLogin);
			 }
		});
		
		function onLogin(results) {
			var stat = results[0];
			if (eval(stat.userid)>0) {
				weii.webox.slideUp( weii.showwebox );
			} else {
				signin.removeAttr('disabled').val('Sign in');
				weii.weboxtitle.text('Incorrect User/Pass');
			}
		}
		$('#weboxcontent .username').focus();
	}
}

weii.navtopage = function (we) {
	window.location.replace(we); 
}

weii.title = function (title) {
	$(document).attr('title', title);
}

weii.fieldHints = function (comp) {
	$('#'+comp+' input:text, #'+comp+' input:password').each( function() {
		var f = $(this);
		var w = f.width();
		var h = f.height();
		var title = f.attr('title');
		var hint = $('<span style="position: absolute; z-index:1002; width: '+w+'px; height: '+h+'px; color: #888; margin-left: 8px; margin-top: 8px;">'+title+'</span>');
		f.before(hint);
		
		hint.click( function(e) {
			e.preventDefault();
			f.focus();
		});
		
		f.focus( function() {
			hint.hide();
		});

		f.blur( function() {
			if(f.val()=='') hint.show();
		});
	});
}

weii.loadScript = function (url,onSuccess) {
		$.ajax({ 
		  url: url, 
		  dataType: 'script', 
		  success: function() { 
			if (onSuccess && $.isFunction(onSuccess)) onSuccess();
		  } 
		}); 
}		

weii.getQuerystring = function (key, default_)
{
	if (default_==null) default_=""; 
	key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
	var qs = regex.exec(window.location.href);
	if(qs == null)
		return default_;
	else
		return qs[1];
}

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

weii.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
