/*
Copyright (c) 2008-2010, Gigdoggy Inc.- Gregory Whiteside. All rights reserved.
gwhiteside@fanteraction.com
*/

function clean(str){
	var bad_classes = ["ui-droppable", "ui-draggable"];
	for(var i = 0; i < bad_classes.length; i++){
		 str = str.replace(new RegExp(bad_classes[i],"g"),"");
	}
	str = str.replace(new RegExp("style=\"(.*?)\"","g"),"");
	str = str.replace(new RegExp("class=\"\s*\"","g"),"");
	str = str.replace(new RegExp("style=\"\s*\"","g"),"");
	str = str.replace(new RegExp("  ","g")," ");
	return trim(str);
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	try{
		chars = chars || "\\s";
		return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
	}catch(exception){return str;}
}
 
function rtrim(str, chars) {
	try{
		chars = chars || "\\s";
		return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
	}catch(exception){return str;};
}

function clean_html(html){	
}

function is_empty(obj){
	for(var o in obj){return false;}
	return true;
}

function initialize_sms(){
	$("#update_content").click(function(){
		show_loader2($(this));
		update_content();
		setTimeout("hide_loader2()",500);
	});
	// i8n setup
	for(var i = 0; i < languages.length; i++){
		var a_lang = languages[i];
		var abbreviation = "", full_lang = "";
		for(var a in a_lang) {
			abbreviation = a, full_lang = a_lang[a];
		}
		var lang_elem = $("<option value='"+abbreviation+"'>"+full_lang+"</option>'");
		$("#language_select").append(lang_elem);
	}
	$("#language_select").change(function(){
		refresh_sms();
	});
}

function update_content(){
	var element = $(context).attr("id");
	update_element(element);
}

function set_i8n(key,type,value,lang){
	if(typeof key[type] == "undefined") key[type] = {"default":value};
	if(typeof key[type] == "string") key[type] = {"default":key[type]}
	key[type][lang] = value;
}

function update_element(element,recursive){
	if(typeof recursive == "undefined") recursive = true;
	if(!(element in ui_content)) ui_content[element] = {};
	var node_content = ui_content[element];
	node_value = $("#node_html").val();
	var re = /<(script).*?>[.\s\S\w\W]*?<\/(script)>/gi;
	if(node_value.search(re) >= 0) node_value = node_value.replace(/script/g,"script2");
	var selected_lang = $("#language_select").val();
	var p = $(context)[0];
	var k = p.nodeName;
	
	switch($(context)[0].nodeName.toLowerCase()){
		case "div":
		case "span":
			set_i8n(node_content,"html",node_value,selected_lang);
			$(context).html(node_value);
			break;
		case "a":
			var href = $("#node_href").val()
			set_i8n(node_content,"html",node_value,selected_lang);
			set_i8n(node_content,"href",href,selected_lang);
			$(context).attr("href",href);
			$(context).html(node_value);
			break;
		case "label":
			var text = $("#node_text").val();
			var html = node_content.text
			set_i8n(node_content,"text",text,selected_lang);
			set_i8n(node_content,"html",html,selected_lang);
			$(context).text(text);
			//$(context).html(html);
			break;
		case "img":
			var src = $("#node_src").val();
			set_i8n(node_content,"src",src,selected_lang);
			$(context).attr("src",src);
			break;
		case "input":
			set_i8n(node_content,"value",$(context).val(),selected_lang);
			break;
		case "textarea":
			set_i8n(node_content,"value",$(context).val(),selected_lang);
			break;
	}
	show_normal();
	if(recursive) recursive_update($(context).parent(),$(context),node_content);
	restore_view();
	fix_outline(true);
	api.update_content(resource,function(){
		$("#sms").addClass("hidden");
		parse_html();
	});
}

function recursive_update(parent_node, source_node, source_content){
	var selected_lang = $("#language_select").val();
	var new_parent = $(parent_node).parent();
	var source_id = $(source_node).attr("id");
	var parent_id = $(parent_node).attr("id");
		if(parent_id in ui_content){
			var html = ui_content[parent_id].html;
			if(typeof html != "string" && selected_lang in html) html = html[selected_lang];
			try{
				var parent_elem = $("<div>" + html + "</div>");
				// now we need to affect the changes from source_content
				for(attr in source_content){
					switch(attr){
						case "text":
							$("#"+source_id,parent_elem).text(source_content[attr][selected_lang]);
							break;
						case "html":
							$("#"+source_id,parent_elem).html(source_content[attr][selected_lang]);
							break;
						default:
							$("#"+source_id,parent_elem).attr(attr,source_content[attr][selected_lang]);
							break;
					}
					//if(attr != "html") $("#" + source_id,parent_elem).attr(attr,source_content[attr]);
					//else $("#" + source_id,parent_elem).html(source_content[attr])
					ui_content[parent_id].html = clean_content($(parent_elem).html());
				}
			}catch(exception){alert(exception)}
		}
		if(parent_id == "contentHolder") return true;
		return recursive_update(new_parent,source_node,source_content)
}

function get_i8n(value){
	var lang = $("#language_select").val();
	if(typeof value != "string"){
		try{
		if(lang in value)
	 		return value[lang]
		else
			return value["default"];
		}catch(exception){return "default"}
	}
	else return value;
}

function refresh_sms(){
	var context_id = $(context).attr("id");
	function remove_ckeditor(){
		$("#cke_node_html").remove();
		$("#node_html").css({visibility:"visible", display:"block"});
	}
	
	switch($(context)[0].nodeName.toLowerCase()){
		case "div":
		case "span":
			if(!is_empty(ui_content[context_id])) 
				$("#node_html").val(get_i8n(ui_content[context_id].html))
			else
				$("#node_html").val(clean($(context).html()));
			//$("#node_html").ckeditor();
			$("#html_details").removeClass("hidden");
			if($(context).hasClass("video_container")){$("#enter_html").addClass("hidden");$("#enter_embed").removeClass("hidden");}
			else{$("#enter_html").removeClass("hidden");$("#enter_embed").addClass("hidden");}
			break;
		
		case "a":
			if(!is_empty(ui_content[context_id])) 
				$("#node_html").val(get_i8n(ui_content[context_id].html))
			else
				$("#node_html").val(clean($(context).html()));
			$("#node_href").val(trim($(context).attr("href")));
			$("#html_details").removeClass("hidden");
			$("#href_details").removeClass("hidden");
			break;
			
		case "img":
			var img_src = ""
			var remove_url = function(context){
				//img_src = (typeof $(context).attr("src") != "undefined") ? $(context).attr("src") : "";
				if(!is_empty(ui_content[context_id])) img_src = get_i8n(ui_content[context_id]["src"])
				else img_src = "";
				try{
					img_src = (img_src.split("url(")[1]).split(")")[0];
				}catch(exception){}
				return img_src;
			}
			//update_image_elem({data:{elem:$("#node_src"), container:$("#img_src")}});
			$("#contentHolder").droppable("destroy");
			$("#contentHolder").droppable({
				accept:".pic",
				drop:function(event,ui){
					$("#content").trigger("click");
					var image = $("img",ui.draggable).attr("src");
					$("#node_src").val(image);
					$(context).attr("src",image);
					$("#image_media_conf").addClass("hidden");
					//show_content_view();
				}
			});
			
			$("#node_src").keyup(function(){
				$("#img_src").attr("src", $(this).val());
				$("#img_src").val($(this).val());
			});
			$("#node_src").change(function(){
				$(this).val(remove_url($(context)));
			});
			remove_url($(context));
			try{
				$("#node_src").val(img_src);
				//$("#img_src").attr("src",img_src);
			}catch(exception){}
			$("#src_details").removeClass("hidden");
			break;
			
		case "label":
			if(!is_empty(ui_content[context_id])) 
				$("#node_text").val(get_i8n(ui_content[context_id].text));
			else $("#node_text").val(clean($(context).text()));
			$("#text_details").removeClass("hidden");
			break;
		
		default:
			remove_ckeditor();
			//$("#content").addClass("hidden");
			$("#css").trigger("click");
	}
}

function render_sms(the_node){
	$(".sms_details").addClass("hidden");
	context = $(the_node).data("context") || the_node;
	context_index = $(the_node).data("context_index") || 0;
	var context_id = $(context).attr("id");
	if($(context).attr("sms") == "true" && context_index == 0){ // this node has editable content
		$("#content").removeClass("hidden");
		$("#sms").removeClass("hidden");
		refresh_sms();
	}
	else{
		clear_sms();
		$("#sms").addClass("hidden");
		$("#content").addClass("hidden");
		//$("#css").trigger("click");
	}
	
}

function clear_sms(){
	$("#node_text").val("");
	$("#node_html").val("");
	$("#node_href").val("");
}