var siteUrl = location.href.replace('http://', '');
siteUrl = siteUrl.split('/');
siteUrl = siteUrl[0];
var ajax = 'http://' + siteUrl + '/ajax/';
$('html').addClass('jsOn');
$(document).ready(function(){
	$('.dialog', '#dialogs').dialog({ autoOpen: false, draggable: false, position:['center', 200], modal: true });
});

/* Site-wide javscript
----------------------------------*/
site = {
	ping : function(t){
		$.post(ajax + 'ping', { }, function(data){
		}, 'jsonp');
		setTimeout(function(){ site.ping(t) }, t);
	}
};

/* Sleep Track Gen
 * -------------------------------*/
 trk = {
 	setup : function(){
		trk.addSegment();
		$('#trk-addSeg').click(trk.addSegment);
		$('#trk-create').click(trk.compile);
		util.labeledInput($('#trk-title'), 'Track Title');
	},
	addSegment : function(){
		var sel = {
			id : 'trk_seg-' + ($('.trk-seg', '#trk-segments').length++),
			className : 'trk-seg'			
		};
		var optElms = [
			{ text : 'Pink Noise'},
			{ text : 'Brown Noise'},
			{ text : 'Alarm'},
			{ text : 'Silence'},
			{ text : 'Fade'},
			{ text : 'Upload...'}
		];
		var segShell = $('<span class="trk-segShell">');
		$('#trk-segments').append(segShell);
		$(segShell).addSelect(sel, optElms);
		$(segShell).append('<span class="trk-segOptions"><input type="text" value="00:00:00" class="trk-segLength rc3"/></span><a href="#" class="trk-segRemove">✕</a></span><div class="clear"></div>');
		$('.trk-segRemove').click(trk.remSegment);
	},
	remSegment : function(){
		var segShell = $(this).closest('.trk-segShell');
		var segID = util.idData($('.trk-seg', segShell).attr('id'));
		segShell.remove();
	},
	compile : function(){
		trk.track = '{';
		$('.trk-segShell', '#trk-segments').each(function(c){
			var content = $('.trk-seg', $(this)).val();
			var length = $('.trk-segLength', $(this)).val();
			trk.track += '"seg'+c+ '": { "content" : "'+ content +'", "len" : "'+length+'"},';
		});	
		trk.track += '}';
		trk.track = trk.track.replace('},}', '}}');
		$.post(ajax+'createtrack', {segments: trk.track, title: $('#trk-title').val()}, function(data){
			var url = 'http://trypolyphasic.com' + data.url;
			$('#trk-download').attr('href', url).text('Right click to save as');
		}, 'jsonp');
		return false;
	},
	track : ''
 };

/* Dialog Boxes
----------------------------------*/
dialog = {
	showThis : function(name, path, opts){
		dialog.closeAll();
		dialog.loading();
		opts = (util.isset(opts)) ? opts : "";
		var id = (util.isset(opts.id)) ? opts.id : 'dialog';
		if(opts.remote){
			$("#"+id)
				.load('http://'+siteUrl+'/'+path.toLowerCase()+'/'+name.toLowerCase(), null, function(){
					dialog.loaded(id);
					$('#'+id).dialog('open');
					if(opts.onload){
						opts.onload();
					}
				})
				.dialog({modal:true, resizeable:false, autoOpen:false, position:['center',150]});
		}
		else{
			$('#'+name).dialog('open');
			if(opts.onload){
				opts.onload();
			}
			dialog.loaded(name);
		}	
	},
	loading : function(){
		$('#dialog_loading').dialog('open');
		dialog.openedList.push('dialog_loading');
	},
	loaded : function(id){
		dialog.close('dialog_loading');
		dialog.openedList.push(id);
	},
	close : function(id){
		$('#'+id).dialog('close');
		var tmp = [];
		for(i in dialog.openedList){
			if(dialog.openedList[i] != id){
				tmp.push(id);
			}
		}
		dialog.openedList = tmp;
	},
	closeAll : function(){
		for(i in dialog.openedList){
			dialog.close(dialog.openedList[i]);
		}
	},
	openedList : []
};

/* Alarm
 * -------------------------------*/
alarm = {
	setup : function(){
		setTimeout(alarm.updateTime, 1000);
		$('#addNap').click(alarm.addNap);
		$('#al-start').click(alarm.set);
		$('#al-grace').keyup(alarm.changeGrace);
		$('#al-sms').click(alarm.toggleSms);
		alarm.updateNapList();
		alarm.loadSettings();
		alarm.initTests();
		site.ping(600000);
	},
	updateTime : function(){
		var d = new Date();
		var curr_hour = timeUtil.addLeadingZero(d.getHours());
		var curr_min = timeUtil.addLeadingZero(d.getMinutes());
		var curr_sec = timeUtil.addLeadingZero(d.getSeconds());
		alarm.time = curr_hour + ":" + curr_min + ":" + curr_sec;
		if(alarm.setTime == undefined) {
			$('#al-time').removeClass('al-over');
			$('#al-time').text(alarm.time);
		}
		else{
			var diff = timeUtil.toSeconds(alarm.alarmTime()) - timeUtil.toSeconds(alarm.time);
			if(diff > 0){
				$('#al-time').text(timeUtil.toHhmmss(diff));
			}
			else{
				$('#al-time').addClass('al-over');
				diff = timeUtil.toSeconds(alarm.time) - timeUtil.toSeconds(alarm.alarmTime());
				$('#al-time').html('<span class="al-wakeUp">Wake up!</span>');
				if(diff > 90){
					$('#al-time').html('<div id="al-timeTxt">You\'ve been oversleeping for</div>'+timeUtil.toHhmmss(diff));
				}
			}
		}
		alarm.checkTime(curr_hour + ":" + curr_min);
		setTimeout(alarm.updateTime, 500)
	},
	checkTime : function(time){
		var t = time.split(':');
		var s = timeUtil.toSeconds(t);
		for(n in alarm.naps){
			var nT = n.split(':');
			var nS = timeUtil.toSeconds(nT);
			if(util.isset(alarm.setTime)){
				if(timeUtil.toSeconds(alarm.time) > timeUtil.toSeconds(alarm.alarmTime())){
					alarm.activate(1);
				}
			}
			else{
				if(t[0] == 0){t[0] = 24};
				var diff = nS - s;
				switch(diff){
					case 60:
						alarm.warn(4);
					break;
					case 300:
						alarm.warn(3);
					break;
					case 900: 
						alarm.warn(2);
					break;
					case 1800:
						alarm.warn(1);
					break;
				}
			}
		}
	},
	set : function(){
		var length = alarm.naps[alarm.closestNap(alarm.time)];
		alarm.setTime = timeUtil.toHhmmss(timeUtil.toSeconds(alarm.time) + (length * 60));
		$('#al-start')
			.unbind('click')
			.click(alarm.unset)
			.text('Stop Nap Now');
		$('#nl-logFormTable').empty();
		napLog.nap.schedStart = alarm.closestNap(alarm.time);
		napLog.nap.actualStart = timeUtil.toHhmm(timeUtil.toSeconds(alarm.time));
		napLog.nap.schedLength = timeUtil.toHhmm(length*60);
		napLog.nap.lateStart = timeUtil.toSeconds(napLog.nap.actualStart) - timeUtil.toSeconds(napLog.nap.schedStart);
		napLog.nap.lateStart = (napLog.nap.lateStart > 0) ? ((napLog.nap.lateStart > 60) ? '('+timeUtil.toHhmm(napLog.nap.lateStart)+' late)' : '(On time)') : '('+timeUtil.toHhmm(Math.abs(napLog.nap.lateStart))+' early)'
		return false;
	},
	unset : function(){
		napLog.nap.actualLength = timeUtil.toHhmm(Math.abs(timeUtil.toSeconds(alarm.time) - timeUtil.toSeconds(napLog.nap.actualStart)));
		napLog.nap.overslept = timeUtil.toSeconds(napLog.nap.actualLength) - timeUtil.toSeconds(napLog.nap.schedLength);
		napLog.nap.overslept = (napLog.nap.overslept > 0) ? ((napLog.nap.overslept > 60) ? '('+timeUtil.toHhmm(napLog.nap.overslept)+' over)' : '(On time)') : '('+timeUtil.toHhmm(Math.abs(napLog.nap.overslept))+' under)'
		napLog.showLogForm();
		alarm.setTime = undefined;
		$('#al-start')
			.unbind('click')
			.click(alarm.set)
			.text('Start Nap Now');
		return false;		
	},
	activate : function(state, test){
		if(alarm.state == state){
			return;
		}
		alarm.state = state;
		$('#al-sound').remove();
		switch(state){
			case 1:
				$('#al-shell').append('<embed id="al-sound" src="/alarms/alarm1.mp3" hidden="true" loop="true" playcount="99999" autostart="true" volume="'+alarm.settings.alarm1Vol+'"/>');
				if(!test){
					$('#al-start').addClass('al-active').text('Turn Alarm Off').unbind('click').click(alarm.deactivate);
					alarm.nextAlarm = setTimeout(function(){
						alarm.activate(2);
					}, 60000);
				}
			break;
			case 2:
				$('#al-shell').append('<embed id="al-sound" src="/alarms/alarm1.mp3" hidden="true" loop="true" playcount="99999" autostart="true" volume="'+alarm.settings.alarm2Vol+'"/>');
			break;
		}
	},
	deactivate : function(){
		clearTimeout(alarm.nextAlarm);
		$('#al-sound').remove();
		alarm.state = undefined;
		$('#al-start')
			.removeClass('al-active');
		alarm.unset();
	},
	warn : function(state, test){
		if(alarm.warnState == state){
			return;
		}
		alarm.warnState = state;
		var attr = ''; var warnTime = 0;
		switch(state){
			case 4:
				warnTime = 10;
				attr = ' endtime="00:16"';
			break;
			case 3:
				warnTime = 5;
				attr = ' endtime="00:18"';
			break;
			case 2:
			case 1:
				warnTime = 5;
				attr = '';
				 
			break;
		}
		$('#al-shell').append('<embed id="al-sound" src="/alarms/warn.mp3" hidden="true" loop="true" playcount="99999" autostart="true" volume="'+alarm.settings.warnVol+'" '+attr+'/>');
		if(!test){
			setTimeout(function(){
				$('#al-sound').remove();
			}, warnTime * 1000);
		}
		setTimeout(function(){
			alarm.warnState = undefined;
		}, 60000);
	},
	addNap : function(){
		var nap = { hour : $('#addNap-hour').val(), min : $('#addNap-min').val(), length : $('#addNap-length').val()};
		alarm.naps[nap.hour+':'+nap.min] = nap.length;
		$.post(ajax + 'addnap', nap, function(data){
			alarm.updateNapList();
		}, 'jsonp');		
	},
	removeNap : function(){
		var t = $(this).attr('id').split('-')
		var nap = { hour : t[2], min : t[3]};
		if(alarm.naps.length == 1){
			alarm.naps = [];
		}
		else{
			delete alarm.naps[nap.hour+':'+nap.min];
		}
		$.post(ajax + 'deletenap', nap, function(data){
			alarm.updateNapList();
		}, 'jsonp');
		return false;
	},
	updateNapList : function(){
		var c = 0; var areNaps = false;
		if(util.isset(alarm.naps)){
			alarm.naps = util.objKeySort(alarm.naps);
		}
		for(n in alarm.naps){
			if(!c){
				areNaps = true;
				$('#al-napList').empty().append('<tr><td>Time</td><td>Length</td><td></td></tr>');
			}
			var nap = alarm.naps[n];
			var length = (nap > 59) ? nap + 'h' / 60 : nap + 'm';
			$('#al-napList').append(''
			+ '<tr><td>'+n+'</td><td>'+nap+'</td><td><a id="al-removeNap-'+n.replace(':', '-')+'"href="#">remove</a></td></tr>');
			$('#al-removeNap-'+n.replace(':', '-')).click(alarm.removeNap);
			c++;
		}
		if(!areNaps){
			$('#al-napList').empty().append('<tr><td>Add a nap to begin</td></tr>');
		}
	},
	closestNap : function(t){
		var smallest = [10000, null];
		t = timeUtil.toSeconds(t);
		naps = alarm.naps;
		for(n in naps){
			nT = timeUtil.toSeconds(n);
			var diff = Math.abs(t-nT);
			if(diff < smallest[0]){
				smallest[0] = diff;
				smallest[1] = n;
			}
		}
		return smallest[1];
	},
	saveSettings : function(){
		$.post(ajax + 'alarmsettings', alarm.settings, function(data){
			
		}, 'jsonp');
	},
	loadSettings : function(){
		$.post(ajax + 'alarmsettings', { get : 1 }, function(data){
			if (util.isset(data.settings)) {
				alarm.settings = data.settings;
				alarm.settings.grace = (util.isset(data.settings.grace)) ? +data.settings.grace : 0;
				$('#al-grace').val(alarm.settings.grace / 60);
			}
			alarm.initVolume();
		}, 'jsonp');
		$.post(ajax + 'sms', { get : 1 }, function(data){
			if(data.sms == 'enabled'){
				$('#al-sms').attr('checked', true);
			}
		}, 'jsonp');
	},
	setting : function(s, v){
		if(!util.isset(v)){
			return alarm.settings[s];
		}
		else{
			alarm.settings[s] = v;
			clearTimeout(alarm.saving);
			alarm.saving = setTimeout(function(){
				alarm.saveSettings();
			}, 200);
			
		}
	},
	initVolume : function(){
		$('.slider').slider({
			range: "min",
			value: 100,
			min: 1,
			max: 100,
			slide: function(event, ui) {
				var set = util.idData($(ui.handle).parent().attr('id'));
				alarm.setting(set, ui.value);
			}
		});
		$('#al-alarm1Vol').slider('option', 'value', alarm.settings.alarm1Vol);
		$('#al-alarm2Vol').slider('option', 'value', alarm.settings.alarm2Vol);
		$('#al-warnVol').slider('option', 'value', alarm.settings.warnVol);

	},
	changeGrace : function(){
		alarm.setting('grace', +($('#al-grace').val()) * 60);
	},
	initTests : function(){
		var stopTest = function(){
			$('#al-sound').remove();
			alarm.state = undefined;
			alarm.warnState = undefined;
			alarm.initTests();
			$(this).text('Play');
		}
		$('#al-test-alarm1').unbind('click').click(function(){
			alarm.activate(1, 1);
			$(this).text('Stop').unbind('click').click(stopTest);
		});
		$('#al-test-alarm2').unbind('click').click(function(){
			alarm.activate(2, 1);
			$(this).text('Stop').unbind('click').click(stopTest);
		});
		$('#al-test-warn').unbind('click').click(function(){
			alarm.warn(1, 1);
			$(this).text('Stop').unbind('click').click(stopTest);
		});
	},
	toggleSms : function(){
		var elm = $(this);	
		if(elm.attr('checked')){
			$.post(ajax + 'sms', { get : 1 }, function(data){
				if(data.sms == 'off'){
					$('#zeepRegister').dialog('open');
				}
				else if(data.sms == 'disabled'){
					$.post(ajax + 'sms', { set : 'enabled' }, function(data){
					}, 'jsonp');
				}
			}, 'jsonp');
		}
		else{
			$.post(ajax + 'sms', { set : 'disabled' }, function(data){
			}, 'jsonp');
		}
	},
	alarmTime : function(){
		return timeUtil.toHhmmss(timeUtil.toSeconds(alarm.setTime) + alarm.settings.grace);
	},
	naps : {}, settings : { grace: 0, alarm1Vol: 100, alarm2Vol: 100, warnVol: 100 }
}

napLog = {
	showLogForm : function(){
		$('#nl-logForm').submit(napLog.saveLog);
		$('#nl-logFormTable').empty().append(''
			+ '<tr><td>Scheduled Start Time</td><td>'+napLog.nap.schedStart+'</td></tr>'
			+ '<tr><td>Actual Start Time</td><td>'+napLog.nap.actualStart+' '+napLog.nap.lateStart+'</td></tr>'
			+ '<tr><td>Scheduled Length</td><td>'+napLog.nap.schedLength+'</td></tr>'
			+ '<tr><td>Actual Length</td><td>'+napLog.nap.actualLength+' '+napLog.nap.overslept+'</td></tr>'
			+ '<tr><td>Slept</td><td><input type="radio" value="yes" name="nl-slept"/> Yes <input type="radio" value="maybe" name="nl-slept"/> Maybe <input type="radio" value="no" name="nl-slept"/> No</td></tr>'
			+ '<tr><td>Dreamt</td><td><input type="radio" value="yes" name="nl-dreamt"/> Yes <input type="radio" value="maybe" name="nl-dreamt"/> Maybe <input type="radio" value="no" name="nl-dreamt"/> No</td></tr>'
			+ '<tr><td>How was your nap?</td><td><select id="nl-rating" name="nl-rating"><option value="1">Terrible</option><option value="2">Not good</option><option value="3" selected="true">Average</option><option value="4">Good</option><option value="5">Amazing!</option></select></td></tr>'
			+ '<tr><td>How do you feel now?</td><td><select id="nl-feeling" name="nl-feeling"><option value="1">Terrible</option><option value="2">Not good</option><option value="3" selected="true">Average</option><option value="4">Good</option><option value="5">Amazing!</option></select></td></tr>'
			+ '<tr><td><input type="submit" value="Save Nap Log"/></td></tr>'
		);
	},
	saveLog : function(){
		napLog.nap.slept = $("input[name='nl-slept']:checked").val();
		napLog.nap.dreamt = $("input[name='nl-dreamt']:checked").val();
		napLog.nap.rating = $('#nl-rating').val();
		napLog.nap.feeling = $('#nl-feeling').val();
		$.post(ajax + 'addnaplog', napLog.nap, function(data){
			$('#nl-logFormTable').empty().append(''
			+ '<tr><td><div id="nl-success">Nap Logged!</div></td></tr>'
			);
			setTimeout(function(){
				$('#nl-success').fadeOut();
			}, 1200);
		}, 'jsonp');
		return false;
	},
	nap : { schedStart : '00:00', actualStart : '00:20', lateStart :'(00:20 late)', 'schedLength' : '00:20', actualLength : '00:24', overslept : '(00:04 overslept)' },
	defNap : this.nap
}

timeUtil = {
	to12hr : function(hhmmss){
		var t = hhmmss.split(':');
		var time = '';
		var ampm = 'am';
		if(t[0] > 11){
			ampm = 'pm';
		}
		if(t[0] == 0){
			t[0] = 12;
		}
		if (t[0] > 12) {
			t[0] = t[0] - 12;
		}
		time = t[0]+':'+t[1];
		time = ((t[2]) ? time+':'+t[2] : time)+' '+ampm;
		return time;			
	}, 
	toSeconds : function(hhmmss){
		var t = [];
		var secs = 0;
		if(typeof hhmmss == 'string'){
			t = hhmmss.split(':');
		}
		else{
			t = hhmmss;
		}
		if(t[0] == 0){
			t[0] = 24;
		}
		secs = (t[0] * 60 + +t[1]) * 60;
		return (t[2]) ? secs + +t[2] : secs;
	},
	toHhmmss : function(s){
		var hrs = Math.floor(Math.floor(s/60)/60);
		var mins = Math.floor(s/60) % 60;
		mins = (mins == 60) ? "00" : mins;
		var secs = timeUtil.addLeadingZero(s % 60);
		return timeUtil.addLeadingZero(hrs)+':'+timeUtil.addLeadingZero(mins)+':'+secs;
	},
	toHhmm : function(s){
		var hrs = Math.floor(Math.floor(s/60)/60);
		var mins = Math.floor(s/60) % 60;
		mins = (mins == 60) ? "00" : mins;
		return timeUtil.addLeadingZero(hrs)+':'+timeUtil.addLeadingZero(mins);
	},
	noSeconds : function(time){
		var t = time.split(':');
		return t[0]+':'+t[1];
	},
	addLeadingZero: function(str){
		str = "" + str;
		if (str.length == 1) {
			str = "0" + str;
		}
		return str;
	},
}
/* Utilities
----------------------------------*/
util = {
	/* Functions */
	addOnLoad : function(fnc){
		if(window.onload){
			var existing = window.onload;
			window.onload = function(){
			fnc();
			existing();
			}
		}
		else{
			window.onload = fnc;
		} 
	},
	cmpObj : function(a){
		  var o = {};
		  for(var i=0;i<a.length;i++)
		  {
			o[a[i]]='';
		  }
		  return o;
	},
	compact : function(ar, i){
		var compacted = [];
		if(util.isset(i)){
			ar[i] = null;
		}
		for(j in ar){
			if(util.isset(ar[j]) && (ar[j] != null)){
				compacted.push(ar[j]);
			}
		}
		return compacted;
	},
	createCookie : function(name,value,days){
		if(days){
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else{
			var expires = "";
		}
		value = escape($.toJSON(value));
		document.cookie = name+"="+value+expires+"; path=/";
	},
	emailIsDone : function(str){
		var domain = str.substring(str.length, str.length-5);
		var acTLDs = util.autoCompleteTLDs;
		for(var c in acTLDs){
			if(domain.indexOf('.'+acTLDs[c]) > 0){
				return true;
			}
		}
		return false;
	},
	emailIsValid : function(str){
		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   return false
		}
		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return false
		}
		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return false
		}
		if (str.indexOf(at,(lat+1))!=-1){
		  return false
		}
		if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
			return false
		}
		if (str.indexOf(dot,(lat+2))==-1){
			return false
		}
		if (str.indexOf(" ")!=-1){
			return false
		}
 		return true;
	},
	eraseCookie : function(name){
		createCookie(name,"",-1);
	},
	formToJson : function(id){
		var data = {};
		var form = util.getForm(id);
		for(i in form.elements){
			data[form.elements[i].name] = form.elements[i].value;
		}
		return data;
	},
	getCaretPosition : function(elm){
		var iCaretPos = 0;
		if (document.selection) {
			elm.focus ();
			var oSel = document.selection.createRange ();
			oSel.moveStart ('character', -elm.value.length);
			iCaretPos = oSel.text.length;
		}
		else if (elm.selectionStart || elm.selectionStart == '0'){
			iCaretPos = elm.selectionStart;
		}
		return (iCaretPos);
	},
	getForm : function(id){
		for(i in document.forms){
			if(document.forms[i].id == id){
				return document.forms[i];
			}
		}
	},
	getKeyCode : function(e){
		return ((window.event) ? event.keyCode : e.charCode);
	},
	idData : function(id){
		id = id.split('-');
		return id[1];
	},
	isset : function(variable){
		return ( !(variable === undefined) );
	},
	labeledInput : function(t, l){
		t
			.focus(function(){
				if(t.val()==l){
					t.val('');
				}
			})
			.blur(function(){
				if(t.val()==''){
					t.val(l);
				}
			});
	},
	objKeySort : function(obj){
		var a = []; var o = {};
		for(i in obj){
			a.push(i);
		}
		a.sort();
		for(j in a){
			o[a[j]] = obj[a[j]];
		}
		return o;
	},
	readCookie : function(name){
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return $.evalJSON((unescape(c.substring(nameEQ.length,c.length))));
		}
		return null;
	},
	scrollY : function(){
			var scrOfY = 0;
			if(typeof(window.pageYOffset) == 'number') {
				//Netscape compliant
				scrOfY = window.pageYOffset;
			}
			else if(document.body && (document.body.scrollLeft || document.body.scrollTop)){
				//DOM compliant
				scrOfY = document.body.scrollTop;
			}
			else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)){
				//IE6 standards compliant mode
				scrOfY = document.documentElement.scrollTop;
			}
			return scrOfY;
		},
	scrollHeight : function(){
		var scrOfY = 0;
		if( typeof(window.scrollMaxY) == 'number') {
			//Netscape compliant
			scrOfY = window.scrollMaxY;
		}
		else if(document.body && (document.body.scrollLeft || document.body.scrollTop)){
			//DOM compliant
			scrOfY = document.body.scrollHeight;
		}
		else if(document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop)){
			//IE6 standards compliant mode
			scrOfY = document.documentElement.scrollHeight;
		}
		return scrOfY;
	},
	windowDimensions : function(r){
		var width = 0, height = 0;
		if(typeof(window.innerWidth) == 'number'){
			//Non-IE
			width = window.innerWidth;
			height = window.innerHeight;
		} 
		else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)){
			//IE 6+ in 'standards compliant mode'
			width = document.documentElement.clientWidth;
			height = document.documentElement.clientHeight;
		} 
		else if(document.body && (document.body.clientWidth || document.body.clientHeight)){
			//IE 4 compatible
			width = document.body.clientWidth;
			height = document.body.clientHeight;
		}
		if(!util.isset(r)){
			return [ width , height ];
		}
		else if(r == 'y' || r == 'h'){
			return height;
		}
		else if(r == 'x' || r == 'w'){
			return width;
		}
	},
	/* Variables */
	autoCompleteTLDs : [
		"com", "net", "org", "in", "uk", "fr", "it"
	]
};

jQuery.fn.addSelect = function(sel, optElms, options){
	var select = $('<select name="'+sel.name+'" id="'+sel.id+'" class="'+sel.className+'"/>');
	for(i in optElms){
		var opt = optElms[i];
		select.append('<option name="'+opt.name+'" id="'+opt.id+'" class="'+opt.className+'">'+opt.text+'</option>');
	}
	if(!isset(options) || !isset(options.addMethod) || options.addMethod == 'append'){
		this.append(select);
	}
	else if(options.addMethod == 'prepend'){
		this.prepend(select);
	}
	else if(options.addMethod == 'insertBefore'){
		select.insertBefore(this);
	}
	else if(options.addMethod == 'insertAfter'){
		select.insertAfter(this);
	}
	return this;
};

String.prototype.showSplit = function(c, n){
	if(!c){
		c = ' ';
	}
	if(!n){
		n = 0;
	}
	var str = this.split(c);
	return str[n];
}
String.prototype.ucfirst = function(){
    var f = this.charAt(0).toUpperCase();
    return f + this.substr(1);
}
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}
String.prototype.addSlashes = function(){
	var str='';
	str=this.replace(/\\/g,'\\\\');
	str=this.replace(/\'/g,'\\\'');
	str=this.replace(/\"/g,'\\"');
	str=this.replace(/\0/g,'\\0');
	return str;
}
String.prototype.stripSlashes = function(){
	var str='';
	str=this.replace(/\\\'/g,'\'');
	str=this.replace(/\\"/g,'"');
	str=this.replace(/\\\\/g,'\\');
	str=this.replace(/\\0/g,'\0');
	return str;
}

function isset(d){
	return util.isset(d);
}
