// JavaScript Document
//Harry Bomrah
var orbitDesktopAPI = function(){
	o = this;
	this.windowcounter = 0;
	this.notify = function(msg,type,time){
		//takes 3 arguments
		//msg (string) : message to display
		//type (string : success, imp, alert
		//time (int) : duration for notification in seconds
		var $notify = $("#orbitnote");
		var img, n_height;
		if(!type)type="";
		switch(type){
			case "alert":
			img = "note_alert.png";
			break;
			case "imp":
			img = "note_imp.png";
			break;
			case "success":
			img = "note_success.png";
			break;
			default:
			img = "note_alert.png";
			break;
		}
		$notify.find("img#note_img").attr("src",o.notifyImgPath+img);
		$notify.find(".note_message").html(msg);
		n_height = $notify.outerHeight();
		if(!time)time=5000; else time=time*1000;
		$notify
			.css({'top':-n_height, 'display':'block', 'opacity':0})
			.animate({top:0,opacity:1},200)
			.delay(time)
			.animate({top:-n_height,opacity:0},200);
	};
	this.executeFunc = function(func,callbackFn){
		//takes 2 arguments 
		//func (object Function) : the function which has to be executed 
		//callbackFn (object function) : the function for callback
		func.call(this);
		if(callbackFn){
			callbackFn.call(this,func);
		}
	};
	this.sortJSON = function(field, reverse, primer){
		//takes 3 arguments
		//field (string): it is the field on which sorting has to be done
		//reverse (boolean): this is for asc or desc
		//primer (method): for example pass parseInt for converting the field attribute in integer
	   var key = function (x) {return primer ? primer(x[field]) : x[field]};
	   return function (a,b) {
	       var A = key(a), B = key(b);
	       return ((A < B) ? -1 : (A > B) ? +1 : 0) * [-1,1][+!!reverse];                  
	   }
	};
	this.rgb2hex = function(rgb) {
		// takes 1 parameter
		// rgb (string) : pass rgb string to convert 
	    rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
	    var hex = function(x) {
	        return ("0" + parseInt(x).toString(16)).slice(-2);
	    }
	    return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
	};
	this.changeWallpaper = function(wallpaper){
		//takes 1 parameter
		//wallpaper (string): takes wallpaper and sets the wallpaper
		$("img#thmbackground").attr("src",o.wallpaperPath+wallpaper);
		o.saveWallpaper(wallpaper);
	};
	this.confirm = function(settings,callbackfn){
		//takes set of arguments in array
		//settings.buttons (array string) : name of buttons to be displayed
		//settings.highlighted  (integer) : takes either 1 or 2.. will highlight the button which is passed
		//settings.message (string) : takes a string and message to be displayed on the confirmbox
		//callbackfn (object function) : function to callback

		if(!settings.buttons)settings.buttons=["Ok","Cancel"];
		if(settings.highlighted!=1 && settings.highlighted!=2)settings.highlighted=2;
		if(!settings.message)settings.message = "Are you sure?"
		var $confirm = $("#orbitdiag");
		$confirm.find(".diag_action a").removeClass("thmc1 thmtxt").addClass("admbg admtxt");
		$confirm.find(".diag_message").text(settings.message);
		if(settings.highlighted == 1)
			$confirm.find("#diag_confirm").removeClass("admbg admtxt").addClass("thmc1 thmtxt");
		if(settings.highlighted == 2)
			$confirm.find("#diag_cancel").removeClass("admbg admtxt").addClass("thmc1 thmtxt");
		$confirm.find("#diag_confirm").text(settings.buttons[0]).one("click",function(){
			$confirm.stop(1,1).fadeOut();
			$confirm.find(".diag_action a").unbind();
			if(typeof callbackfn=="function")
				callbackfn.call(this,true);
		});
		$confirm.find("#diag_cancel").text(settings.buttons[1]).one("click",function(){
			$confirm.stop(1,1).fadeOut();
			$confirm.find(".diag_action a").unbind();
			if(typeof callbackfn=="function")
				callbackfn.call(this,false);
		});
		$confirm.stop(1,1).fadeIn();
	};
	this.getArrayfromJson = function(tjson,key){
		// returns array and takes json object and key
		//json (json object) : json object from which the key has to be extracted
		// key (string) : key which has to be extracted 
		var tempArray = new Array;
		$.each(tjson,function(i,val){
			tempArray.push(val[key]);
		})
		return tempArray;
	};
	this.appWindow = function(settings,callbackfn){
		//takes set of arguments as array and gives callback
		//settings.method (string) : like open and close 
		//settings.title (string) : the window title
		//settings.appid (string) : appid.. user can use this appid to open or close or refresh the window
		//settings.url (string) : it is the url if you want to force external url to open in appwindow... you have to pass extURL in appid if you want to open externalurl
		if(typeof settings == "undefined")settings = {};
		if(!settings.appid){
			o.notify("Invalid AppID.","imp",3);
			return;
		}
		if(!settings.method)settings.method = "open";
		if(settings.method == 'open'){
			var appurl = "http://www.rulingcom.com";
			o.windowcounter++;
			if(!settings.title)settings.title = "New Window "+o.windowcounter;
			if(settings.appid=="extURL"){
				if(settings.url){
					if(settings.url.substr(0,3)!="http")settings.url = "http://"+settings.url;
					var urlregex = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)");
					if(urlregex.test(settings.url))
						appurl = settings.url;
					else{
						o.notify("Invalid URL","alert",3);
						return;
					}
				}
				else{
					o.notify("Invalid URL","alert",3);
					return;
				}
			}
			var whtml =$('<div id="app_frame_'+o.windowcounter+'" class="thmc2 app_frame" data-content="'+settings.appid+'"><div id="content"><div id="header" class="hh3"><div class="dtitle w2 hh3 hp" style="text-transform:capitalize;"><span class="thmtxth">'+settings.title+'</span></div><span class="icon-remove hh3 hp thmtxt"></span></div><div id="holder_'+o.windowcounter+'" class="app_holder"><iframe src="'+appurl+'" frameborder="0" scrolling="auto"></iframe><div class="clear"></div></div></div></div>');
			$(o.contentHolder).append(whtml);
			var parentwindow = $(o.contentHolder).find("div#app_frame_"+o.windowcounter);
			var app_holder_height = parentwindow.height() - 72;
			var app_holder_width = parentwindow.width();
			parentwindow.find("iframe").attr({"height":app_holder_height,"width":app_holder_width});
			parentwindow.find("div.app_holder").height(app_holder_height);
			parentwindow.find("span.icon-remove").click(function(){
				parentwindow.remove();
			})
		}
		if(typeof callbackfn=="function"){
			callbackfn.call(this);
		}
	};
	this.toolPopup = function(settings){
		if(settings == "destroy"){
			$(".desktop_toolpopup").hide("fold",function(){
				$(this).remove();
				$(this).parent().css("position","");
			})
			return;
		}
		if(settings.parent){
			if(settings.parent.find("div.desktop_toolpopup").length == 0){
				settings.height = (!settings.height ? "50px" : settings.height);
				settings.width = (!settings.width ? "150px" : settings.width);
				settings.html = (!settings.html ?  "" : settings.html);

				//Events
				settings.onClose = (!settings.onClose ?  function(){} : settings.onClose);
				settings.beforeOpen = (!settings.beforeOpen ?  function(){} : settings.beforeOpen);
				settings.onOpen = (!settings.onOpen ?  function(){} : settings.onOpen);
				settings.beforeClose = (!settings.beforeClose ?  function(){} : settings.beforeClose);
				//Events end

				var leftpos = settings.parent.outerWidth();
				var toolpopup = $("<div class='desktop_toolpopup' style='height:"+settings.height+";width:"+settings.width+"; left:"+leftpos+"px;'>"+settings.html+"</div>");
				settings.parent.css("position","relative");
				settings.parent.prepend(toolpopup);
				toolpopup.click(function(event){
					event.stopPropagation();
				});
				settings.beforeOpen.call(this);
				toolpopup.show("fold",function(){
					settings.onOpen.call(this);
					$(document).unbind("click");
					$(document).one("click",function(e){
						settings.beforeClose.call(this);
						toolpopup.hide("fold",function(){
							toolpopup.remove();
							settings.parent.css("position","");
							settings.onClose.call(this);
						});						
					})
				});				
			}
		}
	}
};
orbitDesktopAPI.prototype.notifyImgPath = "temp";
orbitDesktopAPI.prototype.wallpaperPath = "temp";
