(function(){var CData=function(DOMElement,execptedType,comment){container=[];inner=false;return this instanceof CData?this.init($(DOMElement),execptedType,comment):new CData($(DOMElement),execptedType,comment);};CData.fn=CData.prototype={init:function(jQueryElement,expectedType,comment){this.className="CData";if(comment==null){var _comment=null;var _node=null;var _type=null;var _data=null;jQueryElement.each(function(p){_node=this;while(true){_node=_node.previousSibling;try{_type=_node.nodeType;}catch(e){}
if(_type==1)return;if(!_node)return;if(_type==8){_data=_node.data;if(_data!=null&&_data.indexOf("CDATA")!=-1){_comment=_data.replace(/(^\[CDATA\[|\]\]$)/gm,'');}
return;}}
return;});if(_comment!=null&&_comment!=undefined){this.container=this.parseValues(_comment);try{if(!this.has("type")||this.get("type")!=expectedType){throw"wrong type, expected:"+expectedType;}}catch(e){throw"invalid cdata tag ex:"+e;};}else{throw"no cdata tag given";}}else{this.container=this.parseValues(comment);if(this.container==null||this.container.length==0||this.container.size()==0){var _found=false;for(var key in this.container){_found=true;break;}
if(!_found){throw"no values set at:"+comment;}}
this.inner=true;}},parseValues:function(part){if(part!=null){part=jQuery.trim(part);if(this.isValidCData(part)){var _tmp=part.substr(1,(part.length-2));var _container=[];var _inArray=0;var _inString=0;var _stringOpener=[];var _actualEntry="";var _name=null;var _value=null;for(var _i=0;_i<_tmp.length;_i++){var c=_tmp.charAt(_i);if(c=='\"'){_inString++;_stringOpener[_inString]=c;}
if(c=='\''){_inString++;_stringOpener[_inString]=c;}
if(c=='{'){_inArray++;}
if(_inString>0){if(c==_stringOpener[_inString]){_inString--;}}
if(_inArray>0){if(c=='}'){_inArray--;}}
if(_inString==0&&_inArray==0&&(c==','||c==':')){if(c==':'){_name=jQuery.trim(_actualEntry);}
if(c==','){_value=_actualEntry;_actualEntry="";if(_name==null){throw"missing ':' in cdata tag at:"+part;}
_container[_name]=this.parse(jQuery.trim(_value));}
_actualEntry="";}else{_actualEntry+=c;}}
_value=_actualEntry;if(_name==null){throw"missing ':' in cdata tag at:"+part;}
_container[_name]=this.parse(jQuery.trim(_value));return _container;}}
return null;},parse:function(part){if(part!=null&&this.isValidCData(part)){if(this.isValidCData(part)){return new $.CData(null,null,part);}}
try{return eval(part);}catch(ex){return null;}},isValidCData:function(part){if(part!=null){if(part.indexOf("{")==0&&part.lastIndexOf("}")==(part.length-1)){var _opener=0;var _closer=0;var _inString=false;var _actualStringOpener=null;for(var _i=0;_i<part.length;_i++){var c=part.charAt(_i);if(!_inString){if(c=='{'){_opener++;}
if(c=='}'){_closer++;}
if(c=='\"'){_inString=true;_actualStringOpener=c;}
if(c=='\''){_inString=true;_actualStringOpener=c;}}else{if(c==_actualStringOpener){_inString=false;}}}
if(_opener==_closer&&!_inString){if(part.indexOf(":")==-1){throw"missing ':' in cdata tag at:"+part;}
return true;}}}
return false;},get:function(key){return this.container[key];},has:function(key){if(this.container!=null&&this.container[key]){var _value=this.container[key];if(!jQuery.isFunction(_value)||_value.className=="CData"){return true;}}
return false;},toString:function(){var _result="";for(var key in this.container){if(_result.length>0){_result+=",";}
_result+=key+":'"+this.container[key]+"'";}
if(!this.inner){return"<!--CDATA[{"+_result+"}]-->";}else{return _result;}}}
$.CData=CData;})();