var ie=document.all;
var nn6=document.getElementById&&!document.all;

var isdrag=false;
var ismove=false;
var x,y;
var dobj, eobj;
var arrBookmarks = new Array();
var arrFeeds = new Array();
var arrSettings = new Array();
var arrDeskloads = new Array();

var user = 0;
var username = "";
var deskload = 0;
var isEditor = user;

var grid=0;var newwin="";var showdesc="";
var requestType = "";

var localIconPath = "http://deskload.com/icons/";
var localBgPath = "http://deskload.com/backgrounds/";
var localIconPreviewPath = localIconPath + "preview/";
var localBgPreviewPath = localBgPath + "preview/";

var newWindowArr = ["no","yes"];
var bgRepeatArr = ["no-repeat","repeat-x","repeat-y","repeat"];
var bgPositionArr = ["0 0", "50% 0", "100% 0", "0 50%", "50% 50%", "100% 50%", "0 100%", "50% 100%", "100% 100%"];
var showDescriptionArr = ["no","yes"];
var imgOn = "images/checkbox_on.gif";
var imgOff = "images/checkbox_off.gif";

var defaultDeskload = "My Deskload::fff::"+ localBgPath +"default.gif::repeat-x::::333::fff::0::yes::no";

// ----------- DESKLOADS AND USER FUNCTIONS

this.getUser=function(){
	var userCookie=getCookie("user");
	if(userCookie != ""){
		user = parseInt(userCookie);
	};
	getDeskload(user);
	getUsername();
	if(user==0){getWelcome();};	
};

this.getDeskload = function(userId){
	if(userId!=0){
		user = userId;
		getDeskloads(userId);
	}else{
		if(getCookie("settings_0") != ""){			
			renderDeskload(0);
		}else{
			createDefaultDeskload();
		};
		arrDeskloads[0]=0;
	}; 
	writeTabs();	
};

this.getUsername=function(){
	var userCookie=getCookie("username");
	if(userCookie != ""){
		username = userCookie;
	};
};

this.setUsername=function(str){
	deleteCookie("username");
	writeCookie("username", str);
	username = str;
};

this.getDeskloads = function(userId){	
	var url="functions/getDeskloads.asp"
	var parameters = "?a=a&user="+userId;
	requestType = "getDeskloads";
	request(url, parameters);
	showNote("Loading Your Deskloads...");	
};

this.initUser = function(str){
	clearOldDeskloads();
	if(document.getElementById("request").style.display == "block"){closeRequestDialog();};
	var tempArrDeskloads = str.split("&&");
	writeCookie("user", user);
	for (var i=0;i<tempArrDeskloads.length;i++){
		tempArrDeskloads2 = tempArrDeskloads[i].split("%%");
		arrDeskloads[i] = tempArrDeskloads2[0]; 
		eval("bookmarks_" + tempArrDeskloads2[0] + "=\"" + escape(tempArrDeskloads2[1]) + "\";");
		writeCookie("settings_" + tempArrDeskloads2[0], tempArrDeskloads2[2]);
	
	};
	deskload = arrDeskloads[0];
	writeTabs();	
	renderDeskload(deskload);
};

this.renderDeskload = function(id){	
	deskload = id;
	clearOld();
	writeTabs();
	getSettings(id);
	getBookmarks(id);
	checkAddByUrl();
}

this.logoffUser = function(){
	for (var i=0;i<arrDeskloads.length;i++){ 	
		deleteCookie("bookmarks_" + arrDeskloads[i]);
		deleteCookie("settings_" + arrDeskloads[i]);	
	};
	deleteCookie("bookmarks_0");
	deleteCookie("settings_0");		
	deleteCookie("user");
	deleteCookie("username");
	user=0;
	deskload=0;
	clearOld();
	clearOldDeskloads();
	getUser();
};


this.clearOld = function(){
	var body  = document.getElementsByTagName("body");
	var oldBookmarks = document.getElementById("bookmarks");
	if (oldBookmarks != null){
		body[0].removeChild(oldBookmarks);
	};
	arrBookmarks.splice(0,arrBookmarks.length);
	arrSettings.splice(0,arrSettings.length);
};
this.clearOldDeskloads = function(){
	arrDeskloads.splice(0,arrDeskloads.length);
};

this.createDefaultDeskload=function(){
	var str = defaultDeskload;
	writeCookie("settings_0",str);
	showWelcome();
	getUser();
};

this.createNewDeskload=function(){
	var str = defaultDeskload;
	var url="functions/newDeskload.asp";
	var parameters = "?a=a&user="+user+"&str="+str;
	requestType = "newDeskload";
	request(url, parameters);
	showNote("Creating New Deskload...");	
};

this.deleteDeskload=function(){
	if(confirm("Are you sure that you want to delete this deskload?")){
		var url="functions/deleteDeskload.asp";
		var parameters = "?a=a&deskload="+deskload+"&user="+user;
		requestType = "deleteDeskload";
		request(url, parameters);		
		showNote("Deleting Deskload...");	
	};
	closeTabEdit();	
};

this.clearAll = function(){
	if(confirm("Are you sure that you want to clear this deskload?")){
		logoffUser();
	};
};

this.writeTabs=function(){
	var settings;
	var html = "" ;
	var header = document.getElementById("header");
	var oldul = document.getElementById("tabs");
	if(oldul){header.removeChild(oldul)};
	var ul = document.createElement("ul");
	ul.setAttribute("id", "tabs");
	for(var i=0;i<arrDeskloads.length;i++){
		settings = getCookie("settings_" + arrDeskloads[i]);
		settings = unescape(settings);
		if (settings!=""){
			html += (arrDeskloads[i]==deskload) ? "<li class=\"selected\"><a href=\"javascript:void(0);\" onclick=\"toggleTabEdit();\" id=\"tabEditBtn\" title=\"Edit this deskload\">Edit this deskload</a>" + writeTabEdit() : "<li>";
			tempArrSettings=settings.split("::");	
			html += "<a href=\"javascript:void(0);\" onclick=\"renderDeskload("+ arrDeskloads[i] +")\">"+ tempArrSettings[0] +"</a></li>";
		};
	};
	ul.innerHTML = "";
	ul.innerHTML = html;
	header.appendChild(ul);
	writeMetaNav();
};

this.writeTabEdit=function(){
	var html = "";
	html = "<ul id=\"tabEdit\">";
	html += "<li><a href=\"javascript:void(0);\" onclick=\"openBookmarkDialog('new');\" title=\"Add New Bookmark\">Add New Bookmark</a></li>";
	html += "<li><a href=\"javascript:void(0);\" onclick=\"openSettingsDialog();\" title=\"Deskload Settings\">Edit Settings</a></li>";	
	html += "<li><a href=\"javascript:void(0);\" onclick=\"alignIcons();\" title=\"Align Icons\">Align Icons</a></li>";	
	html += "<li><a href=\"javascript:void(0);\" onclick=\"openImportFileDialog();\" title=\"Import bookmarks to this deskload from html file\">Import Bookmarks</a></li>";	
	//html += "<li><a href=\"javascript:void(0);\" onclick=\"openSettingsDialog();\" title=\"Share Deskload\">Share This Deskload</a></li>";	
	//html += "<li><a href=\"javascript:void(0);\" onclick=\"openSettingsDialog();\" title=\"Unlock Deskload\">Unlock This Deskload</a></li>";
	if(arrDeskloads.length>1){
		html += "<li><a href=\"javascript:void(0);\" onclick=\"deleteDeskload("+ deskload +");\" title=\"Delete Deskload\">Delete This Deskload</a></li>";		
	};
	html += "</ul>";
	return html;
};
this.toggleTabEdit=function(){
	var tabEdit = document.getElementById("tabEdit");
	tabEdit.style.display = (tabEdit.style.display == "block") ? "none" : "block";
};
this.closeTabEdit=function(){
	var tabEdit = document.getElementById("tabEdit");
	if(tabEdit){tabEdit.style.display = "none";};	
};

this.writeMetaNav = function(){
	var meta = document.getElementById("meta");
	var html = "";
	meta.innerHTML = "";
	if(user != 0){
		if (username != ""){
			html += "<li>Logged in as: <span>" + username + "</span></li>";
		};
		html += "<li><a href=\"javascript:void(0);\" onClick=\"createNewDeskload();\">Create New Deskload</a></li>";
		html += "<li><a href=\"javascript:void(0);\" onClick=\"changePassword();\">Change Password</a></li>";
		html += "<li><a href=\"javascript:void(0);\" onClick=\"logoffUser();\">Log Off</a></li>";
	} else {
		html += "<li><a href=\"javascript:void(0);\" onClick=\"clearAll();\">Clear All</a></li>";
		html += "<li><a href=\"javascript:void(0);\" onClick=\"openLoginDialog();\">Sign up/Log in</a></li>";
	};
	html += "<li><a href=\"javascript:void(0);\" onClick=\"openHelpDialog();\">Help/About</a></li>";
	meta.innerHTML = html;
};




// ----------- INIT FUNCTIONS

function sortIcons(){
	var icons = document.getElementById("icons");
	for (var i=0;i<arrIcons.length;i++){
		span = document.createElement("span"); 		
		var bookmarkIconStyle;
		bookmarkIconStyle = "";
		span.innerHTML = "";
		if(ie){
			span.innerHTML = "<img src=\"images/blank.gif\" style=\"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + localIconPath + arrIcons[i] + "', sizingMethod='crop');\" onclick=\"selectIcon('"+ localIconPath + arrIcons[i] +"', 'local');\" alt=\"\" />";	
		} else{
			span.innerHTML = "<img src=\""+ localIconPath + arrIcons[i] +"\" onclick=\"selectIcon('"+ localIconPath + arrIcons[i] +"', 'local');\"  alt=\"\" />";	
		};				
		icons.appendChild(span);
	};
	var extIcon = document.getElementById("inputExtIcon");
	extIcon.onchange = function(){
		if(this.value != "")selectIcon(this.value);
	};	
};

function selectIcon(ico,local){
	var iconContainer = document.getElementById("icon");
	document.getElementById("inputIcon").value = ico;
	iconContainer.innerHTML = "";
	if (ie){
		iconContainer.innerHTML = "<img src=\"images/blank.gif\" style=\"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + ico + "', sizingMethod='crop');\" alt=\"\"  />";
	} else {
		iconContainer.innerHTML = "<img src=\"" + ico + "\" alt=\"\" />";
	};
	if(local!=undefined)document.getElementById("inputExtIcon").value = "";
};

function sortBackgrounds(){
	var backgrounds = document.getElementById("backgrounds");
	for (var i=0;i<arrBackgrounds.length;i++){
		span = document.createElement("span"); 
		span.innerHTML = "";
		span.innerHTML = "<img src=\"" + localBgPreviewPath + arrBackgrounds[i] + "\" onclick=\"selectBackground('"+ localBgPath + arrBackgrounds[i] +"', 'local');\">";
		backgrounds.appendChild(span);
	};
	var extBackground = document.getElementById("inputExtBackground");
	extBackground.onchange = function(){
		if(this.value != "")selectBackground(this.value);
	};
};

function selectBackground(bg,local){
	var backgroundContainer = document.getElementById("background");
	document.getElementById("inputBackground").value = bg;
	backgroundContainer.innerHTML = "";
	backgroundContainer.innerHTML = "<img width=\"32\" height=\"32\" src=\"" + bg + "\">";
	if(local!=undefined)document.getElementById("inputExtBackground").value = "";
};

this.alignIcons = function(){
	closeTabEdit();
	var wHeight = ie ? document.body.clientHeight : window.innerHeight;
	var wWidth = ie ? document.body.clientWidth : window.innerWidth;	
	var starty = 60;
	var startx = 10;
	var stepy = 100;
	var stepx = 80;
	var col = 0;
	var row = 0;
	var x,y;
	var maxy = Math.floor(wHeight/stepy);
	maxy -= 1;
	for (var i=0;i<arrBookmarks.length;i++){
		arrBookmark = arrBookmarks[i].split("::");
		x = startx + (col*stepx);
		y = starty + (row*stepy);		
		arrBookmarks[i] = arrBookmark[0] +"::"+ arrBookmark[1] +"::"+ arrBookmark[2] +"::"+ x +"::"+ y + "::" + arrBookmark[5];
		row++;
		if (row >= maxy){
			row = 0;
			col++;
		};
	};
	renderBookmarks();
	saveBookmarks();
};

// ----------- BOOKMARKS FUNCTIONS

this.getBookmarks = function(id){
	var bookmarks = (id == 0) ?  getCookie("bookmarks_0") : eval("bookmarks_" + id);		
	bookmarks = unescape(bookmarks);	
	if (bookmarks != ""){
		arrBookmarks = bookmarks.split(";;");
		renderBookmarks();		
	};
};	
this.renderBookmarks = function(){
	var bookmarks = document.getElementById("bookmarks"); 	
	if (bookmarks == null){
		var body = document.getElementsByTagName("body"); 
		bookmarks = document.createElement("ul"); 
		bookmarks.setAttribute("id", "bookmarks");
		body[0].appendChild(bookmarks);
	} else {
		bookmarks.innerHTML = "";
	};
	
	for (i=0;i<arrBookmarks.length;i++){
		arrBookmark = arrBookmarks[i].split("::");
		bookmark = document.createElement("li");
		bookmark.setAttribute ("id",i);
		bookmark.className = "bookmark";

		bookmarkStyle = "left:"+ arrBookmark[3] + "px;top:"+ arrBookmark[4] +"px;z-index:"+i+";"
		bookmarkIconStyle = "background-repeat:no-repeat;background-position:0 0;";

		var div = document.createElement("div");
		var a = document.createElement("a");
				
		if(ie){
			div.innerHTML = "<img src=\"" + arrBookmark[0] + "\" style=\"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + arrBookmark[0] + "', 		sizingMethod='crop');\" alt=\"\" />";	
		} else{
			div.innerHTML = "<img src=\""+ arrBookmark[0] +"\" alt=\"\" />";	
		}				
		
		bookmark.setAttribute ("style", bookmarkStyle);
		if(!nn6)bookmark.style.setAttribute("cssText", bookmarkStyle);
					
		
		a.setAttribute("href", arrBookmark[2]);
		a.setAttribute("title", arrBookmark[5]);
		a.setAttribute("alt", arrBookmark[5]);
		if(arrSettings[8]=="yes"){a.setAttribute("target", "_blank");};
		a.innerHTML = "";
		a.innerHTML = "<span>"+ arrBookmark[1] +"</span>";
		
		bookmark.appendChild(div);
		bookmark.appendChild(a);
		bookmarks.appendChild(bookmark);	
	};
};

this.updatePosition = function(){
	var bookmarks = document.getElementById("bookmarks"); 
	if (bookmarks != null){
		arrLi = bookmarks.getElementsByTagName("LI");
		for (i=0;i<arrLi.length;i++){
			arrBookmark = arrBookmarks[i].split("::");
			arrBookmarks[i] = arrBookmark[0] +"::"+ arrBookmark[1] +"::"+ arrBookmark[2] +"::"+ fixValues(arrLi[i].style.left) +"::"+ fixValues(arrLi[i].style.top) + "::" + arrBookmark[5];
		};
		saveBookmarks();
	};
};

this.openBookmarkDialog = function(id,url,title,description){
	showCover();
	document.getElementById("editBookmark").style.display = "block";		
	var intId = parseInt(id);
	if(id != "new"){
		var arrBookmark = arrBookmarks[intId].split("::");
		document.getElementById("inputId").value = id;		
		document.getElementById("inputIcon").value = arrBookmark[0];	
		document.getElementById("inputTitle").value = arrBookmark[1];
		document.getElementById("inputUrl").value = arrBookmark[2];	
		document.getElementById("inputDesc").value = arrBookmark[5];	
		document.getElementById("icon").innerHTML = "";
		if(ie){
			document.getElementById("icon").innerHTML = "<img src=\"images/blank.gif\" style=\"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + arrBookmark[0] + "', sizingMethod='crop');\" alt=\"\"  />";
		} else {
			document.getElementById("icon").innerHTML = "<img src=\"" + arrBookmark[0] + "\" alt=\"\" />";
		};			
		if(!strCheck(arrBookmark[0],localIconPath)){
			document.getElementById("inputExtIcon").value = arrBookmark[0];	
		};
		document.getElementById("editBookmarkTitle").innerHTML = "";
		document.getElementById("editBookmarkTitle").innerHTML = "Edit Bookmark";	
	}else{
		
		document.getElementById("inputId").value = "";		
		document.getElementById("inputIcon").value = "";	
		document.getElementById("inputTitle").value = (title != undefined) ? title : "";
		document.getElementById("inputUrl").value = (url != undefined) ? url : "";		
		document.getElementById("inputDesc").value = (description != undefined && description != "") ? description : "";				
		document.getElementById("icon").innerHTML = "";				
		document.getElementById("editBookmarkTitle").innerHTML = "";
		document.getElementById("editBookmarkTitle").innerHTML = "Add Bookmark";	
	};
	if (document.getElementById("inputUrl").value == ""){document.getElementById("inputUrl").value = "http://"};
	document.getElementById("bookmarkDelete").style.display = (id != "new") ? "block" : "none";
};

this.closeBookmarkDialog = function(){
	document.getElementById("editBookmark").style.display = "none";
	removeCover();
};

this.updateBookmark = function(){	
	if (checkBookmark()){
		var id = document.getElementById("inputId").value;	
		if (id == "")id = newBookmark();	
		var intId = parseInt(id);
		var obj = document.getElementById(id);
		var arrBookmark = arrBookmarks[intId].split("::");
			
		arrBookmarks[intId] = document.getElementById("inputIcon").value +"::"+ document.getElementById("inputTitle").value +"::"+ document.getElementById("inputUrl").value+"::"+ arrBookmark[3] +"::"+ arrBookmark[4] +"::"+ document.getElementById("inputDesc").value;

		var bookmarkStyle = "left:"+ arrBookmark[3]+"px;top:"+ arrBookmark[4] +"px;z-index:"+ id +";"

		if(ie){
			obj.getElementsByTagName("div")[0].innerHTML = "<img src=\"images/blank.gif\" style=\"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + document.getElementById("inputIcon").value + "',sizingMethod='crop');\" alt=\"\" />";	
		} else{
			obj.getElementsByTagName("div")[0].innerHTML = "<img src=\""+ document.getElementById("inputIcon").value +"\" alt=\"\" />";	
		}	

		obj.setAttribute("style", bookmarkStyle);
		if(!nn6)obj.style.setAttribute("cssText", bookmarkStyle);
	
		var a = obj.getElementsByTagName("a");
		a[0].href = document.getElementById("inputUrl").value;
		a[0].title = document.getElementById("inputDesc").value;
		if(arrSettings[8]=="yes"){a[0].target = "_blank";};
		a[0].alt = document.getElementById("inputDesc").value;
		a[0].innerHTML = "";
		a[0].innerHTML = "<span>" + document.getElementById("inputTitle").value + "</span>";
		
		closeBookmarkDialog();
		saveBookmarks();		
	};
};

this.checkBookmark = function(){
	if(document.getElementById("inputTitle").value.length > 40){
		alert("Bookmark title is limited to 40 characters.");
		document.getElementById("inputTitle").focus();
		return false;
	} else if(document.getElementById("inputTitle").value.length == 0){
		alert("Please, write bookmark title.");
		document.getElementById("inputTitle").focus();
		return false;
	} else if(document.getElementById("inputUrl").value == "" ||  document.getElementById("inputUrl").value == "http://"){
		alert("Please, write bookmark address.");
		document.getElementById("inputUrl").focus();
		return false;
	} else if(document.getElementById("inputIcon").value.length == 0){
		alert("Please, choose an icon.");
		return false;	
	} else{
		return true;
	}; 
};

this.cancelBookmark = function(){
	closeBookmarkDialog();
};

this.newBookmark = function(){
	var bookmarks = document.getElementById("bookmarks"); 
	if (bookmarks == null){
		var body = document.getElementsByTagName("body"); 
		bookmarks = document.createElement("ul"); 
		bookmarks.setAttribute ("id", "bookmarks");
		body[0].appendChild(bookmarks);
	};	
	var newId = arrBookmarks.length;
	var bookmark = document.createElement("li");
	bookmark.setAttribute ("id",newId);
	bookmark.className = "bookmark";
	var a = document.createElement("a");
	var div = document.createElement("div");
	a.setAttribute ("href","");
	bookmark.appendChild(div);
	bookmark.appendChild(a);
	bookmarks.appendChild(bookmark);	

	wHeight = ie ? document.body.clientHeight : window.innerHeight;
	wWidth = ie ? document.body.clientWidth : window.innerWidth;		
	x = wWidth/2-25;
	y = wHeight/2-25;
	arrBookmarks.push("::::::"+x+"::"+y+""+"::");
	
	return newId;
};

this.deleteBookmark = function(){
	if(confirm("Are you sure that you want to delete this bookmark?")){
		var id = document.getElementById("inputId").value;
		var intId = parseInt(id);
		arrBookmarks.splice(intId,1);					
		closeBookmarkDialog();
		renderBookmarks();		
		saveBookmarks();
	};
};
var checkedUrl = false;
this.checkAddByUrl = function(){
	if(!checkedUrl){	
		var checkUrl = getQuerystring("url");
		var checkTitle = getQuerystring("title");
		var checkDescription = getQuerystring("description");
		if(checkTitle != undefined) checkTitle = checkTitle.replace(/%20+/g," ");
		if(checkDescription != undefined) checkDescription = checkDescription.replace(/%20+/g," ");
		if(checkUrl != undefined) openBookmarkDialog("new", checkUrl, checkTitle, checkDescription);
		checkedUrl = true;		
	};		
};

/*
this.checkFavicon = function(obj){
	var url = document.getElementById("inputUrl").value;
	if(url == "" || url == "http://"){
		alert("Please, write bookmark address.");
		document.getElementById("inputUrl").focus();
	} else {
		var faviconMsg = document.getElementById("faviconMsg");
		faviconMsg.innerHTML = "";faviconMsg.innerHTML = "Searching favicon...";
		var tempUrl = url.replace('http://','','i');
		if(tempUrl.indexOf('/') != -1) tempUrl = tempUrl.substring(0,tempUrl.indexOf('/'));
		if(tempUrl.charAt(tempUrl.length-1) == "/") tempUrl = tempUrl.substring(0,tempUrl.length - 1);		
		var favicon = "http://" + tempUrl + "/favicon.ico"; 
		var img = new Image();
		img.src = favicon;
		img.onload = faviconFound(favicon);
		img.onerror = faviconNotFound;		
	};
};
this.faviconFound = function(){
	var faviconMsg = document.getElementById("faviconMsg");
	faviconMsg.innerHTML = "";faviconMsg.innerHTML = "Favicon found.";
	var extIcon = document.getElementById("inputExtIcon");	
	extIcon.value = favicon;
	selectIcon(favicon);			
};
this.faviconNotFound = function(){
	var faviconMsg = document.getElementById("faviconMsg");
	faviconMsg.innerHTML = "";faviconMsg.innerHTML = "Favicon not found.";
}; */

// ----------- BOOKMARK IMPORT
var imported, arrImported

this.openImportDialog = function(){
	showCover();
	document.getElementById("import").style.display = "block";	
};

this.closeImportDialog=function(){
	document.getElementById("import").style.display="none";
	removeCover();
};
this.cancelImport=function(){
	closeImportDialog();
};
this.openImportFileDialog = function(){
	showCover();
	document.getElementById("importFile").style.display = "block";	
};
this.closeImportFileDialog=function(){
	document.getElementById("importFile").style.display="none";
	removeCover();
};
this.cancelImportFile=function(){
	closeImportFileDialog();
};
this.importFile = function(){
	document.getElementById("importForm").submit();
	closeImportFileDialog();
	openRequestDialog();
};
this.renderImported = function(){
	closeRequestDialog();
	imported = document.getElementById("importResults");
	arrImported = imported.contentWindow.document.body.getElementsByTagName("a");
	openImportDialog();
	var importedLinks = document.getElementById("importedLinks");	
	importedLinks.innerHTML = "";
	for (var i=0;i<arrImported.length;i++){
		obj = arrImported[i];
		obj = deleteImages(obj);
		obj.rel = "checked";
		li = document.createElement("li");		
		span1 = document.createElement("span");
		span1.className = "one";
		a = document.createElement("a");
		a.id = "importedCheckbox" + i;
		a.rel = i;
		a.innerHTML = "<img src=\"images/checkbox_on.gif\" />";		
		a.onclick = function(){toggleImport(this.rel,this.id);};
		span1.appendChild(a);
		span2 = document.createElement("span");
		span2.className = "two";
		span2.innerHTML = arrImported[i].innerHTML;
		span3 = document.createElement("span");
		span3.className = "three";
		span3.innerHTML = arrImported[i].href;		
		li.appendChild(span1);
		li.appendChild(span2);
		li.appendChild(span3);
		importedLinks.appendChild(li);
	};		
};
this.toggleImport = function(id, aId){
	var obj = arrImported[id];
	var a = document.getElementById(aId);
	a.innerHTML = (obj.rel == "checked") ? "<img src=\"images/checkbox_off.gif\" />" : "<img src=\"images/checkbox_on.gif\" />";
	obj.rel = (obj.rel == "checked") ? "" : "checked";	
};
this.importBookmarks = function(){
	var obj, ico, url, title;
	for (var i=0;i<arrImported.length;i++){
		obj = arrImported[i];
		ico = arrIcons[12];
		title = obj.innerHTML; 
		title = (title.length > 40) ? title.substring(0,40) : title;
		url = obj.href;	
		if (obj.rel == "checked") arrBookmarks.push(localIconPath + ico + "::"+ title +"::" + url + "::100::100::");
	};
	closeImportDialog();
	alignIcons();
};
this.deleteImages = function(obj){
	var images = obj.getElementsByTagName("img");
	for (var i=0;i<images.length;i++){
		obj.removeChild(images[i]);
	};
	return obj;
};
// icon, title, url, left, top, description


// ----------- SETTINGS

this.getSettings=function(id){
	var settings = getCookie("settings_" + id);	
	settings = unescape(settings);
	if (settings!=""){
		arrSettings=settings.split("::");	
		setSettings(arrSettings[0],arrSettings[1],arrSettings[2],arrSettings[3],arrSettings[4],arrSettings[5],arrSettings[6],arrSettings[7],arrSettings[8],arrSettings[9]);
	};
};

this.openSettingsDialog = function(){
	showCover();
	setSettings(arrSettings[0],arrSettings[1],arrSettings[2],arrSettings[3],arrSettings[4],arrSettings[5],arrSettings[6],arrSettings[7],arrSettings[8],arrSettings[9]);
	document.getElementById("editSettings").style.display = "block";	
};

this.updateSettings = function(){
	var deskloadname = (document.getElementById("deskloadName").value!="") ? document.getElementById("deskloadName").value : "My Deskload";
	var pagebg = (document.getElementById("pageBg").value!="") ? document.getElementById("pageBg").value : "fff";
	var bgimg = document.getElementById("inputBackground").value;
	var bgrepeat = (document.getElementById("bgRepeat").value!="") ? document.getElementById("bgRepeat").value : bgRepeatArr[0];
	var bgposition = (document.getElementById("bgPosition").value!="") ? document.getElementById("bgPosition").value : bgPositionArr[0];
	var linkbg = (document.getElementById("linkBg").value!="") ? document.getElementById("linkBg").value : "000";
	var linkcolor = (document.getElementById("linkColor").value!="") ? document.getElementById("linkColor").value : "fff";	
	var newwindow = (document.getElementById("newWindow").value!="") ? document.getElementById("newWindow").value : newWindowArr[0];
	var showdescription = (document.getElementById("showDescription").value!="") ? document.getElementById("showDescription").value : showDescriptionArr[0];
	var aligngrid = 0;
	
	setSettings(deskloadname,pagebg,bgimg,bgrepeat,bgposition,linkbg,linkcolor,aligngrid,newwindow,showdescription);
	saveSettings(deskloadname,pagebg,bgimg,bgrepeat,bgposition,linkbg,linkcolor,aligngrid,newwindow,showdescription);
	closeSettingsDialog();
	writeTabs();
};

this.closeSettingsDialog=function(){
	document.getElementById("editSettings").style.display="none";
	removeCover();
};

this.cancelSettings=function(){
	closeSettingsDialog();
};

this.setSettings = function(deskloadname,pagebg,bgimg,bgrepeat,bgposition,linkbg,linkcolor,aligngrid,newwindow,showdescription){
	
	arrSettings[0]=deskloadname;
	arrSettings[1]=pagebg;
	arrSettings[2]=bgimg;
	arrSettings[3]=bgrepeat;
	arrSettings[4]=bgposition;
	arrSettings[5]=linkbg;
	arrSettings[6]=linkcolor;
	arrSettings[7]=aligngrid;
	arrSettings[8]=newwindow;
	arrSettings[9]=showdescription;
	
	grid=aligngrid;
	newwin=newwindow;
	showdesc = showdescription;
	setAtt();

	setCheckboxes();	
	
	document.getElementById("deskloadName").value=deskloadname;
	document.getElementById("pageBg").value=pagebg;
	document.getElementById("pageBgPreview").style.background="#"+pagebg;	
	document.getElementById("linkBg").value=linkbg;
	document.getElementById("linkBgPreview").style.background="#"+linkbg;
	document.getElementById("linkColor").value=linkcolor;
	document.getElementById("linkColorPreview").style.background="#"+linkcolor;
	document.getElementById("inputBackground").value=bgimg;
	
	var backgroundContainer = document.getElementById("background");
	backgroundContainer.innerHTML = "";
	backgroundContainer.innerHTML = "<img width=\"32\" height=\"32\" src=\"" + bgimg + "\">";

	var head=document.getElementsByTagName("head"); 
	userStyle=document.createElement("style");
	userStyle.setAttribute("type","text/css");
	var cont;
	cont="body{background-color:#"+pagebg+";background-image:url("+bgimg+");background-repeat:"+bgrepeat+";background-position:"+bgposition+";}";
	cont+=".bookmark span,#credits,#saving,#credits a{background:#"+linkbg+";color:#"+linkcolor+";}";

	if(userStyle.styleSheet){
		userStyle.styleSheet.cssText = cont;
	} else {
		userStyle.innerHTML = "";
		userStyle.innerHTML = cont;
	};
	
	var oldStyles = document.getElementsByTagName("style");
	for(var i=0;i<oldStyles.length;i++){
		head[0].removeChild(oldStyles[i]);	
	};
	
	head[0].appendChild(userStyle);
};

this.generatePicker = function(field){
	var arrColor = Array("00","33","66","99","cc","ff");
	var arrColor2 = Array("00","11","22","33","44","55","66","77","88","99","aa","bb","cc","dd","ee","ff");
	var html="";
	var color="";
	var parent = document.getElementById("editSettings");
	var picker = document.createElement("div");
	picker.setAttribute("id","picker");	
	for (var i=0;i<arrColor.length;i++){
	for (var j=0;j<arrColor.length;j++){
	for (var k=0;k<arrColor.length;k++){
		color = arrColor[i] + arrColor[j] + arrColor[k];
		html += "<a href=\"javascript:void(0);\" style=\"background:#" + color + "\" onclick=\"closePicker('"+ field +"','"+ color +"')\">"+ color +"</a>";
	};};};
	for (var l=0;l<arrColor2.length;l++){
		color = arrColor2[l] + arrColor2[l] + arrColor2[l];
		html += "<a href=\"javascript:void(0);\" style=\"background:#" + color + "\" onclick=\"closePicker('"+ field +"','"+ color +"')\">"+ color +"</a>";
	}	
	html += "<a href=\"javascript:void(0);\" onClick=\"cancelPicker();\" id=\"pickerCancel\">Close picker</a>"
	picker.innerHTML = "";
	picker.innerHTML = html;
	parent.appendChild(picker);
};

this.changePickerPreview = function(preview,value){
	document.getElementById(preview).style.background = "#"+value;
};

this.closePicker = function(field,value){
	preview = field + "Preview";
	field = document.getElementById(field);	
	field.value = value;
	preview = document.getElementById(preview);
	preview.style.background = "#"+value;
	cancelPicker();
};
this.cancelPicker = function(){
	var parent = document.getElementById("editSettings");
	var child = document.getElementById("picker");
	parent.removeChild(child);
};


this.toggleCheckbox = function(group,id,toggleOff){
	var tempArr = eval(group+"Arr");	
	var field = document.getElementById(group);
	id = parseInt(id);
	for (var i=0;i<tempArr.length;i++){
		tempId = group+i;
		img = document.getElementById(tempId);		
		if(id==i){
			if(toggleOff){
				img.src = imgOn;
			} else {
				img.src = (img.src.indexOf(imgOff) != -1) ? imgOn : imgOff; 		
			}			
			field.value = (img.src.indexOf(imgOn) != -1) ? tempArr[i] : ""; 
		} else {
			img.src=imgOff;
		};					
	};
};

this.setCheckboxes = function(){
	var groups = new Array("newWindow", "bgRepeat", "bgPosition","showDescription");
	var groupOrders = new Array(8, 3, 4, 9);
	for (var i=0;i<groups.length;i++){
		tempArr = eval(groups[i]+"Arr");	
		tempOrder = groupOrders[i];
		for (var j=0;j<tempArr.length;j++){
			if(arrSettings[tempOrder] == tempArr[j]){
				toggleCheckbox(groups[i],j,true);
			};
		};	
	};
};

this.setAtt = function(){
	var bookmarks = document.getElementById("bookmarks"); 
	if (bookmarks != null){
		arrA = bookmarks.getElementsByTagName("a");
		for (var i=0;i<arrA.length;i++){
			if(newwin==newWindowArr[1]){
				arrA[i].setAttribute("target", "_blank");
				document.getElementById("sponsor").setAttribute("target", "_blank");
			}else{
				arrA[i].removeAttribute("target");
				document.getElementById("sponsor").removeAttribute("target");
			};		
		};
	};
};

// ----------- LOG IN / SIGN UP

this.openLoginDialog = function(){
	showCover();
	document.getElementById("login").style.display = "block";	
};
this.closeLoginDialog=function(){
	document.getElementById("login").style.display="none";
	removeCover();
};
this.cancelLogin=function(){
	closeLoginDialog();
};

this.openRequestDialog = function(){
	showCover();
	document.getElementById("request").style.display = "block";	
	document.getElementById("requestMessage").innerHTML = "";
	document.getElementById("requestMessage").innerHTML = "<p>Please wait while processing...</p>";	
};
this.closeRequestDialog=function(){
	document.getElementById("request").style.display="none";
	removeCover();
};
this.cancelRequest=function(){
	closeRequestDialog();
};

this.goBackToSignup = function(){
	closeRequestDialog();
	openLoginDialog();
};

this.signupRequest=function(){
	var username = document.getElementById("signupUsername").value;
	var email = document.getElementById("signupEmail").value;
	var bookmarks = getCookie("bookmarks_0");
	var settings = getCookie("settings_0");
	var url="functions/signup.asp";
	var parameters = "?a=a&username="+ username +"&email="+ email +"&bookmarks="+ bookmarks +"&settings="+ settings;
	if(checkEmail(email)){
		closeLoginDialog();
		openRequestDialog();
		requestType = "signup";
		request(url, parameters);
	} else {
		alert("Please, provide a vaild email address");
	};
};

this.loginRequest=function(){
	var username = document.getElementById("loginUsername").value;
	var password = document.getElementById("loginPassword").value;
	var url="functions/login.asp";

	var parameters = "?a=a&username="+ username +"&password="+ password;
	closeLoginDialog();
	openRequestDialog();
	requestType = "login";
	request(url, parameters);	
};


// ----------- PASSWORD

this.changePassword = function(){
	openPasswordDialog();
};
this.openPasswordDialog = function(){
	showCover();
	document.getElementById("passwordChange").style.display = "block";	
};
this.closePasswordDialog=function(){
	document.getElementById("passwordChange").style.display="none";
	removeCover();
};
this.cancelPassword=function(){
	closePasswordDialog();
};
this.changePasswordRequest=function(){
	var oldPass = document.getElementById("oldPass").value;
	var newPass1 = document.getElementById("newPass1").value;
	var newPass2 = document.getElementById("newPass2").value;
	if(newPass1 != newPass2){
		alert("Repeated password don't match!")
		return false;
	} else {
		var url="functions/changePassword.asp";
		var parameters = "?a=a&user=" + user + "&old="+ oldPass +"&new="+ newPass1;
		closePasswordDialog();
		openRequestDialog();
		requestType = "changePassword";
		request(url, parameters);	
	};
};


// ----------- HELP

this.openHelpDialog = function(){
	showCover();
	document.getElementById("help").style.display = "block";	
};
this.closeHelpDialog=function(){
	document.getElementById("help").style.display="none";
	removeCover();
};

this.cancelHelp=function(){
	closeHelpDialog();
};

// ----------- MOUSE FUNCTIONS

zindex=10;
this.mouseDown = function(e){
	var fobj = nn6 ? e.target : event.srcElement;  	
	var topelement = nn6 ? "HTML" : "BODY";
	
	if (fobj.tagName != "HTML"){
		while (fobj.tagName != topelement && fobj.className != "bookmark" && fobj.id != "tabEdit" && fobj.id != "tabs"){
			fobj = nn6 ? fobj.parentNode : fobj.parentElement;	
		};
	};
	if (fobj.className=="bookmark"){
		isdrag = true;
		dobj = fobj;
		dobj.style.zIndex = zindex++;
		tx = parseInt(dobj.style.left+0);
		ty = parseInt(dobj.style.top+0);
		x = nn6 ? e.clientX : event.clientX;
		y = nn6 ? e.clientY : event.clientY;
		document.onmousemove=mouseMove;
		return false;
	};
	
	if (fobj.id != "tabEdit" && fobj.id != "tabs"){
		var tabmenu = document.getElementById("tabEdit");
		if(tabmenu != undefined){
			if(tabmenu.style.display=="block"){
				tabmenu.style.display="none";
			};
		};
	};
};

this.mouseMove = function(e){
  if (isdrag){
	ismove = true;
	dobj.style.left = nn6 ? tx + e.clientX - x + "px" : tx + event.clientX - x + "px";
	dobj.style.top = nn6 ? ty + e.clientY - y + "px" : ty + event.clientY - y + "px";
	return false;
  };
};

this.mouseUp = function(){
	if(isdrag && ismove){
		updatePosition();
	}
	ismove = false;
	isdrag=false;
};

this.mouseDblClick = function(e){
	var fobj       = nn6 ? e.target : event.srcElement;
	var topelement = nn6 ? "HTML" : "BODY";

	if (fobj.tagName != "HTML"){
		while (fobj.tagName != topelement && fobj.className != "bookmark"){
			fobj = nn6 ? fobj.parentNode : fobj.parentElement;
		};
	};
	if (fobj.className=="bookmark"){
		eobj = fobj;
		openBookmarkDialog(eobj.id);
	};
};


// ----------- HTTP REQUEST

var http_request = false;

this.request=function(url, parameters){
	parameters += "&clear=" + new Date().getTime();
	http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		 http_request = new XMLHttpRequest();
		 if (http_request.overrideMimeType) {
				http_request.overrideMimeType('text/xml');
		 }
	} else if (window.ActiveXObject) { // IE
			http_request = new ActiveXObject("Microsoft.XMLHTTP");
	};
	http_request.onreadystatechange = requestDone;
	http_request.open('POST', url, true);
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_request.setRequestHeader("Content-length", parameters.length);
	http_request.setRequestHeader("Connection", "close");
	http_request.send(parameters);
};

this.requestDone=function(){
	var requestMessageObj = document.getElementById("requestMessage");	
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			if (requestType == "login"){
				if(http_request.responseText.indexOf("SUCCESS") != -1){
					var userId = http_request.responseText.split("::");
					getDeskload(userId[1]);	
					setUsername(userId[2]);
				}else{
					requestMessageObj.innerHTML = "";
					requestMessageObj.innerHTML = http_request.responseText;
				};	
			} else if (requestType == "getDeskloads"){
				if (http_request.responseText != ""){										
					initUser(http_request.responseText);
					hideNote();					
				};	
			} else if (requestType == "newDeskload"){
				if (http_request.responseText != ""){										
					initUser(http_request.responseText);
					hideNote();					
				};
			} else if (requestType == "deleteDeskload"){
				if (http_request.responseText != ""){										
					initUser(http_request.responseText);
					hideNote();
				};			
			} else if (requestType == "changePassword"){
				requestMessageObj.innerHTML = "";
				requestMessageObj.innerHTML = http_request.responseText;
			} else if (requestType == "save"){	
				hideSave();
				//alert(http_request.responseText);
			} else {
				requestMessageObj.innerHTML = "";
				requestMessageObj.innerHTML = http_request.responseText;
			};
		} else {
			requestMessageObj.innerHTML = "";
			requestMessageObj.innerHTML = "<p><strong>There was a problem with your request.</strong></p> <p>Please try again or contact us on <a href=\"mailto:info@deskload.com\">info@deskload.com</a></p>";
		};
	};
};

this.showNote = function(str){
	var note = document.getElementById("note");
	note.innerHTML = "";
	note.innerHTML = str;
	note.style.display = "block";
};
this.hideNote = function(){
	var note = document.getElementById("note");
	note.innerHTML = "";
	note.style.display = "none";
};

// ----------- SAVE FUNCTIONS

this.saveBookmarks=function(){
	var str="";
	for (i=0;i<arrBookmarks.length;i++){
		if(i>0)str+=";;";
		str+=arrBookmarks[i];
	};
	str = escape(str);	
	if(deskload != 0){
		saveBookmarksDB(deskload,str);
	} else {
		writeCookie("bookmarks_" + deskload, str);		
	};	
};

this.saveSettings=function(deskloadname,pagebg,bgimg,bgrepeat,bgposition,linkbg,linkcolor,aligngrid,newwindow,showdescription){
	var str = deskloadname+"::"+pagebg+"::"+bgimg+"::"+bgrepeat+"::"+bgposition+"::"+linkbg+"::"+linkcolor+"::"+aligngrid+"::"+newwindow+"::"+showdescription;
 	str = escape(str);
	writeCookie("settings_" + deskload, str);
	if(deskload != 0){
		saveSettingsDB(deskload,str);
	}	
};

this.saveBookmarksDB=function(deskload,str){
	eval("bookmarks_" + deskload + "=\"" + str + "\";");
	showSave();
	var url="functions/saveBookmarks.asp";
	var parameters = "?a=a&deskload="+ deskload + "&str=" + str;
	requestType = "save";
	request(url, parameters);	
};

this.saveSettingsDB=function(deskload,str){
	showSave();
	var url="functions/saveSettings.asp";
	var parameters = "?a=a&deskload="+ deskload +"&str="+ str;
	requestType = "save";
	request(url, parameters);	
};

// ----------- OTHER FUNCTIONS

this.getWelcome = function(){
	if(getCookie("welcome") != "hidden"){
		showWelcome();
	};
};
this.showWelcome = function(){
	var welcome = document.getElementById("welcome"); 
	welcome.style.display = "block";
	deleteCookie("welcome");
};
this.hideWelcome = function(){
	var welcome = document.getElementById("welcome"); 
	welcome.style.display = "none";
	writeCookie("welcome","hidden");
};

this.fixValues = function(str){
	return str.replace("px", "");
};

this.strCheck = function(str,term){
  if(str.indexOf(term) != -1){
		return true;
	}else{
		return false;
	}; 
};
this.showCover = function(){
	removeCover();
	var body = document.getElementsByTagName("body"); 
	var cover = document.createElement("div"); 
	cover.setAttribute("id", "cover");
	cover.className = "cover";
	body[0].appendChild(cover);
	closeTabEdit();
	hideWelcome();
};
this.removeCover = function(){
	var body = document.getElementsByTagName("body"); 
	var cover = document.getElementById("cover"); 
	if (cover) body[0].removeChild(cover);
};

this.getCookie = function(name){
  var cookieValue = "";
  var search = name + "=";
  if(document.cookie.length > 0){ 
    offset = document.cookie.indexOf(search);
    if (offset != -1){ 
      offset += search.length;
      end = document.cookie.indexOf(";", offset);
      if (end == -1) end = document.cookie.length;
      cookieValue = unescape(document.cookie.substring(offset, end));
    };
  };
  return cookieValue;
};
this.writeCookie = function(name,value){
	var expire = "";
	expire = new Date((new Date()).getTime() + 1000*60*60*3600000);
	expire = "; expires=" + expire.toGMTString();
  	document.cookie = name + "=" + escape(value) + expire;
};
this.deleteCookie = function(name){
	var expire = "; expires=Thu, 01-Jan-1970 00:00:01 GMT";
  	document.cookie = name + "=" + expire;
};

this.getQuerystring = function(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    };
  };
};

this.checkEmail = function(str){
  var regEx = /^[^@]+@[^@]+.[a-z]{2,}$/;
  return (str.search(regEx) != -1);
};

this.showSave = function(){
	document.getElementById("saving").className = "";
};
this.hideSave = function(){
	document.getElementById("saving").className = "hidden";
};

/* ------------------------ */

this.init = function(){
	getUser();
	sortIcons();
	sortBackgrounds();
	wHeight = ie ? document.body.clientHeight : window.innerHeight;
	wWidth = ie ? document.body.clientWidth : window.innerWidth;		
	arrObj = new Array("editBookmark", "editSettings", "login", "help", "request", "passwordChange", "import", "importFile");
	for (var i=0;i<arrObj.length;i++){
		obj = document.getElementById(arrObj[i]);
		obj.style.top = ((wHeight/2)-200) + "px";
		obj.style.left = ((wWidth/2)-240) + "px";
		if(obj.id == "editSettings"){obj.style.left = ((wWidth/2)-360) + "px";}
	};	
};

document.onmousedown=mouseDown;
document.onmouseup=mouseUp;
document.ondblclick=mouseDblClick;

window.onload = init;


// deskload
// id, name
// bookmark
// icon, title, url, left, top, description
// settings
// deskload name, bg color, bg image, bg repeat, bg position, link bg color, link txt color, align to grid, open in new window, show bookmark description
