/*
 * Copyright (c)  2006-2009 Maskat Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
maskat.lang.Class.declare("maskat.widget.html.Div")
	.extend("maskat.widget.html.HTMLWidget", {

	defaultGetter: "getInnerHTML",

	defaultSetter: "setInnerHTML",
	
    createWidget: function(parent) {
		var div = document.createElement("div");

		div.className = this.className;
		div.style.position = this.position || "absolute";
		div.style.left = this.left + "px";
		div.style.top = this.top + "px";
		div.style.whiteSpace = "nowrap";
		div.innerHTML = this.element || "";

		this.element = div;
    },
    
	getInnerHTML: function(){
		return this.element.innerHTML;
	},

	setInnerHTML: function(value){
		this.element.innerHTML = value;
	}

});
/*
 * Copyright (c)  2006-2009 Maskat Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
maskat.lang.Class.declare("maskat.widget.html.HTMLWidget")
	.extend("maskat.layout.Widget", {

	dispose: function() {
		maskat.lang.Object.dispose(this);
	},

	unwrap: function() {
		return this;
	},

	getWidgetId: function() {
		return this.name;
	},

	getElement: function() {
		return this.element;
	},

	setParent: function(parent){
		if (this.parent == parent || !this.element) {
			return;
		}
		this.parent = parent;
		parent.appendChildElement(this.element);
	}

});
/*
 * Copyright (c)  2006-2009 Maskat Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
maskat.lang.Class.declare("maskat.widget.html.HTMLWidgetLibrary")
	.extend("maskat.layout.WidgetLibrary", {

	getBindingConfiguration: function() {
		return {
			javaScriptGlobal: {
				type: maskat.widget.html.Script,
				children: {
					"#cdata-section": { property: "text" }
				}
			},
			
			javaScript: {
				type: maskat.widget.html.Script,
				children: {
					"#cdata-section": { property: "text" }
				}
			},
			
			divHtml: {
				type: maskat.widget.html.Div,
				attributes: {
					name: { type: "string" , required: true  },
					top: { type: "number" , required: true  },
					left: { type: "number" , required: true  },
					className: { type: "string" },
					position: {
						type: "enum",
						values: [ "static", "relative", "absolute" ]
					}
				},
				children: {
					"#cdata-section": { property: "element" }
				}
			},
	
			iFrame: {
				type: maskat.widget.html.IFrame,
				attributes: {
					name: { type: "string" , required: true  },
					top: { type: "number" , required: true },
					left: { type: "number" , required: true },
					width: { type: "number", defaultValue: 0 },
					height: { type: "number", defaultValue: 0 },
					url: { type: "string" ,  defaultValue:"about:blank" }
				}
			}
		};
	}

});
/*
 * Copyright (c)  2006-2009 Maskat Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
maskat.lang.Class.declare("maskat.widget.html.HTMLWidgetPlugin")
	.extend("maskat.core.Plugin", {

	_static: {
		initialize: function() {
			maskat.core.Plugin.register(this);
		}
	},

	getPluginId: function() {
		return "html";
	},

	getVersion: function() {
		return "2.1.0.v20090410";
	},

	start: function() {
		var reader = maskat.layout.LayoutXMLReader.getInstance();
		var library = new maskat.widget.html.HTMLWidgetLibrary();
		reader.addWidgetLibrary(library);
	}

});
/*
 * Copyright (c)  2006-2009 Maskat Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
maskat.lang.Class.declare("maskat.widget.html.IFrame")
	.extend("maskat.widget.html.HTMLWidget", {

	defaultGetter: "getSrc",

	defaultSetter: "setSrc",
	
    createWidget: function(parent) {
		var iframe = document.createElement("iframe");
		iframe.style.position = "absolute";
		iframe.style.top = this.top;
		iframe.style.left = this.left;
		iframe.style.width = this.width;
		iframe.style.height = this.height;
		iframe.src = this.url;

		this.element = iframe;
    },

	getSrc: function(){
		return this.element.src;
	},

	setSrc: function(value){
		if (value) {
			this.element.src = value;
		}
	}

});
/*
 * Copyright (c)  2006-2009 Maskat Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
maskat.lang.Class.declare("maskat.widget.html.Script")
	.extend("maskat.widget.html.HTMLWidget", {

	createWidget: function(parent) {
		maskat.app.loadJavaScriptFromString(this.text);
	},

	setParent: function(parent){
		if (this.parent == parent) {
			return;
		}
		this.parent = parent;
	}

});
