/*
	SCGRPH lib, version 0.0.3 (2006-06-19)
	Copyright: 2006, Yosuke Yasuda
*/


/*@cc_on @*/
/*@if (!@_win32)
Array.prototype.push = function(o){
	this[this.length] = o;
}
@else @*/

/*@end @*/

if(!SCGRPH) var SCGRPH={};
SCGRPH.loc = location.href;
if(SCGRPH.loc.indexOf("?")!=-1) SCGRPH.loc = SCGRPH.loc.substring(0,SCGRPH.loc.indexOf("?"));
if(SCGRPH.loc.indexOf("#")!=-1) SCGRPH.loc = SCGRPH.loc.substring(0,SCGRPH.loc.indexOf("#"));
SCGRPH.loc = SCGRPH.loc.split("index.html").join("");

if(!window["SCGRPH_NO_CURRY"]){
	Function.prototype._=function(a){
	    var b = this;
	    return function() {
	        return b(a.apply(null, arguments));
	    }
	}
}

SCGRPH.evacuate = function(){
	SCGRPH.loc = "scgrph";
}

SCGRPH.pathRules={
	/*
	name_NUM_n_o:{
		attach:{regexp:new RegExp("^(.+)_n(\.gif|\.jpg|\.png)$"),callback:function(a,b,c){return b+"_o"+c;}},
		dettach:{regexp:new RegExp("^(.+)_o(\.gif|\.jpg|\.png)$"),callback:function(a,b,c){return b+"_n"+c;}}
	},
	name_NUM_o:{
		attach:{regexp:new RegExp("^(.+)(\.gif|\.jpg|\.png)$"),callback:function(a,b,c){return b+"_o"+c;}},
		dettach:{regexp:new RegExp("^(.+)_o(\.gif|\.jpg|\.png)$"),callback:function(a,b,c){return b+c;}}
	},
	name_o_NUM:{
		attach:{regexp:new RegExp("^(.+)(_[0-9]+)(\.gif|\.jpg|\.png)$"),callback:function(a,b,c,d){return b+"_o"+c+d;}},
		dettach:{regexp:new RegExp("^(.+)_o(_[0-9]+)(\.gif|\.jpg|\.png)$"),callback:function(a,b,c,d){return b+c+d;}}
	}*/
	name_NUM_n_o:{
		attach:{regexp:new RegExp("^(.+)_n(\.gif|\.jpg|\.png)$"),callback:"$1_o$2"},
		dettach:{regexp:new RegExp("^(.+)_o(\.gif|\.jpg|\.png)$"),callback:"$1_n$2"}
	},
	name_NUM_o:{
		attach:{regexp:new RegExp("^(.+)(\.gif|\.jpg|\.png)$"),callback:"$1_o$2"},
		dettach:{regexp:new RegExp("^(.+)_o(\.gif|\.jpg|\.png)$"),callback:"$1$2"}
	},
	name_o_NUM:{
		attach:{regexp:new RegExp("^(.+)(_[0-9]+)(\.gif|\.jpg|\.png)$"),callback:"$1_o$2$3"},
		dettach:{regexp:new RegExp("^(.+)_o(_[0-9]+)(\.gif|\.jpg|\.png)$"),callback:"$1$2$3"}
	}
}

SCGRPH.swapper = {
	apply:function(){
		var styles = arguments;
		for(var j=0;j<styles.length;j++){
			var style = styles[j];
			if(typeof style != "string") var elms = style;
			else{
				if(typeof cssQuery == "function") var elms = cssQuery(style);
				else var elms = $$(style);
			}
			
			for(var i=0;i<elms.length;i++){
				
				if(!elms[i].src) continue;
				var parent = SCGRPH.node.getParent(elms[i],"a");
				if(parent!=null){
					var href = SCGRPH.path.basename(parent.href);
					var hreg = new RegExp(href.split("/").join("\\/").split(".").join("\\."));
				}
				
				if(parent != null && href == SCGRPH.path.basename(SCGRPH.loc) || 
						hreg.test(SCGRPH.path.basename(SCGRPH.loc).split("#")[0].split("?")[0])){
					elms[i].src = SCGRPH.swapper.attached(elms[i].src);
				}
				else{
					elms[i].src = SCGRPH.swapper.dettached(elms[i].src);
					(new Image()).src = SCGRPH.swapper.attached(elms[i].src);
					SCGRPH.swapper.attachEvent(elms[i]);
				}
			}
		}
/*		
		Behavior.register(style,function(elm){
			elm.onmouseover = function(e){
				
			},
			elm.onmouseout = function(e){
				
			}
		});*/
	},
	
	attachEvent:function(elm){
		elm.onmouseover = function(e){
			try{
				var elm = e.target || e.srcElement;
			}
			catch(err){
				var elm = this;
			}
			try{
				elm.src = SCGRPH.swapper.attached(elm.src);
			}
			catch(err){};
		}
		elm.onmouseout = function(e){
			try{
				var elm = e.target || e.srcElement;
			}
			catch(err){
				var elm = this;
			}
			try{
				elm.src = SCGRPH.swapper.dettached(elm.src);
			}
			catch(err){};
		}
	},
	deleteEvent:function(elm){
		delete elm.onmouseover;
		delete elm.onmouseout;
	},
	attached:function(src){
		return src.replace(SCGRPH.swapper.pathRule.attach.regexp,SCGRPH.swapper.pathRule.attach.callback);
	},
	dettached:function(src){
		return src.replace(SCGRPH.swapper.pathRule.dettach.regexp,SCGRPH.swapper.pathRule.dettach.callback);
	},
	forceAttach:function(elm){
		elm.src = SCGRPH.swapper.dettached(elm.src);
		(new Image()).src = SCGRPH.swapper.attached(elm.src);
		SCGRPH.swapper.attachEvent(elm);
	},
	forceDettach:function(elm){
		elm.src = SCGRPH.swapper.attached(elm.src);
		SCGRPH.swapper.deleteEvent(elm);
	},
	swapOn:function(elm){
		SCGRPH.swapper.forceDettach(elm);
	},
	pathRule:SCGRPH.pathRules.name_o_NUM
};

SCGRPH.activator={
	apply:function(){
		var styles = arguments;
		for(var j=0;j<styles.length;j++){
			var style = styles[j];
			if(typeof style != "string") var elms = style;
			else{
				if(typeof cssQuery == "function") var elms = cssQuery(style);
				else var elms = $$(style);
			}
			
			for(var i=0;i<elms.length;i++){
				var elm = elms[i];
				if(elms[i].tagName.toUpperCase()=="A") var child = elms[i];
				else var child = elms[i].firstChild;//SCGRPH.findChild(elms[i],"a");
				var href = SCGRPH.path.basename(child.href);
				var hreg = new RegExp(href.split("/").join("\\/").split(".").join("\\."));
				if(href == SCGRPH.path.basename(SCGRPH.loc) || 
						hreg.test(SCGRPH.path.basename(SCGRPH.loc).split("#")[0].split("?")[0])){
					SCGRPH.element.addClassName(elm,SCGRPH.activator.className);
				}
				else{
					
				}
			}
		}
	},
	className:"active"
}
SCGRPH.element={
	addClassName:function(elm,className){
		var a = elm.className.split(" ");
		for(var i=0;i<a.length;i++){
			if(className == a[i]) return;
		}
		elm.className = className;
	}
};

SCGRPH.node={
	findParent: function(node, tagName) {
		var element = node;
		while (element.parentNode && (!element.tagName ||
			(element.tagName.toUpperCase() != tagName.toUpperCase())))
		element = element.parentNode;
		return element;
	},
	getParent:function(node,tagName){
		var element = node;
		if(element.parentNode.tagName.toUpperCase() != tagName.toUpperCase()) return null;
		return element.parentNode;
	},
	findChild:function(node,tagName){
	}
}

SCGRPH.path={
	basename:function(path){
		if(path.indexOf("?")!=-1) path = path.substring(0,path.indexOf("?"));
		if(path.indexOf("#")!=-1) path = path.substring(0,path.indexOf("#"));
		path = path.split(SCGRPH.loc).join("");
		if(path.indexOf("http://")>-1) return path;
		if(path.charAt(path.length-1) == "/") path += "index.html";
		return SCGRPH.loc +  path;
	}
}

SCGRPH.window={
	apply:function(obj,ext){
		if(!obj) return;
		/*@if (@_jscript)
			obj.onclick = function(){return SCGRPH.window._openWindow(obj,ext);};
		@else @*/
			if(navigator.appVersion.indexOf("Safari") < 0)
				obj.addEventListener("click",function(ev){SCGRPH.window._openWindow(obj,ext);ev.preventDefault();},true);
			else obj.onclick = function(){return SCGRPH.window._openWindow(obj,ext);};
		/*@end @*/
	},
	_openWindow:function(obj,ext){
		var href = obj.href;
		var name = href.split("/").join("_").split(".").join("_").split(":").join("_").split("?")[0].split("#")[0];
		var w = (ext && ext["w"])?ext["w"]:640;
		var h = (ext && ext["h"])?ext["h"]:480;
		var s = (ext && ext["s"])?ext["s"]:0;
		var win = window.open(href,name,'width=' + w + ',height=' + h + ',scrollbars=' + s);
		win.focus();
		return false;
	}
}
SCGRPH.cookie={
	get:function(theName){
	    theName += "=";
	    theCookie = document.cookie+";";
		start = theCookie.indexOf(theName);
		if (start != -1){
	        	end = theCookie.indexOf(";",start);
		   return unescape(theCookie.substring(start+theName.length,end));
		}
		return false;
	}
}



SCGRPH.action = {
	list : [],
	addLoadEvent : function(func) {
		var oldonload = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {
				oldonload();
				func();
			}
		}
	},
	apply : function() {
		for (i = 0; i < SCGRPH.action.list.length; i++) {
			var rule = SCGRPH.action.list[i];
			if(typeof cssQuery == "function") var tags = cssQuery(rule.selector, rule.from);
			else var tags = $$(rule.selector);
			
			if (tags) {
				for (j = 0; j < tags.length; j++) {
					rule.action(tags[j]);
				}
			}
		}
	},
	register : function(selector, action, from) {
		SCGRPH.action.list.push({selector:selector,from:from,action:action});
	},
	start : function() {
		SCGRPH.action.addLoadEvent(function() {
			SCGRPH.action.apply();
		});
	}
}


SCGRPH.action.start();

if(typeof $ != "function")
$=function(id,element){
	if(!element) element=window.document;
	if(typeof(id)=='object') return id;
	if(element.getElementById) return element.getElementById(id);
	if(element.all) return element.all(id);
	if(document.layers) return document.layers[id];
//	throw "unsupport browser";
}

if(typeof $$ != "function")
$$ = function(selector,bool){
	if(!document.getElementsByTagName) return [];
	var tokens = selector.split(' ');
	var currentContext = [document];
	var token;
	
	for (var i=0;i<tokens.length;i++){
		token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');

		if (token.indexOf('#') > -1) {
			var bits = token.split('#');
			if (bits[0] && $(bits[1]).nodeName.toLowerCase() != bits[0].toLowerCase()) return [];
			currentContext = [$(bits[1])];
			
			continue;
		}

		if (token.indexOf('.') > -1){
			var bits = token.split('.');
			if (!bits[0]) bits[0] = '*';
			for (var found=[], h = 0; h < currentContext.length; h++){
				var a = currentContext[h].getElementsByTagName(bits[0]);
				
				for(var j=0;j<a.length;j++){
					if(a[j].className && a[j].className.match(new RegExp('\\b'+bits[1]+'\\b'))){
						//found.push(a[j]);
						found[found.length] = a[j];
					}
				}
			}
			currentContext = found;
			continue;
		}

		if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)){
			var tagName = RegExp.$1;
			var attrName = RegExp.$2;
			var attrOperator = RegExp.$3;
			var attrValue = RegExp.$4;

			if (!tagName) tagName = '*';
			for (var found, h = 0; h < currentContext.length; h++)
				found = currentContext[h].getElementsByTagName(tagName);
			var callback;
			switch (attrOperator) {
				case '=':
					callback = function(e) { return (e.getAttribute(attrName) == attrValue); };
				break;
				case '~':
					callback = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
				break;
				case '|':
					callback = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
				break;
				case '^':
					callback = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
				break;
				case '$':
					callback = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
				break;
				case '*':
					callback = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
				break;
				default :
					callback = function(e) { return e.getAttribute(attrName); };
			}
			
			for (var currentContext = [], k = 0; k < found.length; k++)
				if (callback(found[k])) currentContext.push(found[k]);
				
			continue;
		}
		
		var found = [];
		for (var tagName=token, h = 0; h < currentContext.length; h++){
			var a = currentContext[h].getElementsByTagName(tagName);
			for(var j=0;j<a.length;j++) found.push(a[j]);
		}
		
		currentContext = found;
	}
	
	return currentContext;
}

